/**
  * Removes all cached info from the Model Workspace, including all children, but does not close
  * this element.
  */
 protected void removeInfo() {
   Object info = ModelWorkspaceManager.getModelWorkspaceManager().peekAtInfo(this);
   if (info != null) {
     ModelWorkspaceItem[] children = ((ModelWorkspaceItemInfo) info).getChildren();
     for (int i = 0, size = children.length; i < size; ++i) {
       ModelWorkspaceItemImpl child = (ModelWorkspaceItemImpl) children[i];
       child.removeInfo();
     }
     ModelWorkspaceManager.getModelWorkspaceManager().removeInfo(this);
   }
 }
  /** @see org.teiid.designer.core.workspace.ModelWorkspaceItem */
  public Object getItemInfo() throws ModelWorkspaceException {

    // element info creation is done inside a lock on the ModelWorkspaceManager
    ModelWorkspaceManager manager;
    synchronized (manager = ModelWorkspaceManager.getModelWorkspaceManager()) {
      Object info = manager.getInfo(this);
      if (info == null) {
        openHierarchy();
        info = manager.getInfo(this);
        if (info == null) {
          throw newNotPresentException();
        }
      }
      return info;
    }
  }
 /** @see Openable */
 public void close() throws ModelWorkspaceException {
   this.closing = true;
   boolean wasVerbose = ModelWorkspaceManager.VERBOSE;
   try {
     Object info = ModelWorkspaceManager.getModelWorkspaceManager().peekAtInfo(this);
     if (info != null) {
       if (ModelWorkspaceManager.VERBOSE) {
         System.out.println(
             "CLOSING Element ("
                 + Thread.currentThread()
                 + "): "
                 + this.toStringWithAncestors()); // $NON-NLS-1$//$NON-NLS-2$
         wasVerbose = true;
         ModelWorkspaceManager.VERBOSE = false;
       }
       ModelWorkspaceItem[] children = ((ModelWorkspaceItemInfo) info).getChildren();
       for (int i = 0, size = children.length; i < size; ++i) {
         ModelWorkspaceItemImpl child = (ModelWorkspaceItemImpl) children[i];
         child.close();
       }
       closing(info);
       ModelWorkspaceManager.getModelWorkspaceManager().removeInfo(this);
       if (wasVerbose) {
         System.out.println(
             "-> Package cache size = "
                 + ModelWorkspaceManager.getModelWorkspaceManager()
                     .cache
                     .pkgSize()); //$NON-NLS-1$
       }
     }
   } catch (ModelWorkspaceException e) {
     throw e;
   } catch (Throwable t) {
     ModelerCore.Util.log(t);
   } finally {
     ModelWorkspaceManager.VERBOSE = wasVerbose;
     this.closing = false;
   }
 }
Ejemplo n.º 4
0
  /** @see org.teiid.designer.core.workspace.Openable */
  @Override
  protected boolean generateInfos(
      final OpenableModelWorkspaceItemInfo info,
      final IProgressMonitor pm,
      final Map newElements,
      final IResource underlyingResource) {

    ModelWorkspaceManager.getModelWorkspaceManager().putInfo(this, info);

    // determine my children
    Collection<IProject> projects = DotProjectUtils.getOpenModelProjects();
    for (IProject project : projects) {
      info.addChild(getModelProject(project));
    }
    return true;
  }
 /**
  * Opens this item and all parents that are not already open.
  *
  * @exception ModelWorkspaceException this item is not present or accessible
  */
 protected void openHierarchy() throws ModelWorkspaceException {
   if (this instanceof InternalOpenable) {
     ((InternalOpenable) this).openWhenClosed(null);
   } else {
     Openable openableParent = getOpenableParent();
     if (openableParent != null) {
       ModelWorkspaceItemInfo openableParentInfo =
           (ModelWorkspaceItemInfo)
               ModelWorkspaceManager.getModelWorkspaceManager()
                   .getInfo((ModelWorkspaceItem) openableParent);
       if (openableParentInfo == null) {
         if (openableParent instanceof InternalOpenable) {
           ((InternalOpenable) openableParent).openWhenClosed(null);
         }
       } else {
         throw newNotPresentException();
       }
     }
   }
 }
 /** Debugging purposes */
 public Object toStringInfo(int tab, StringBuffer buffer) {
   Object info = ModelWorkspaceManager.getModelWorkspaceManager().peekAtInfo(this);
   this.toStringInfo(tab, buffer, info);
   return info;
 }
Ejemplo n.º 7
0
 /**
  * @see
  *     org.teiid.designer.core.workspace.ModelWorkspace#removeModelResourceReloadVetoListener(org.teiid.designer.core.workspace.ModelResourceReloadVetoListener)
  * @since 4.2
  */
 @Override
 public void removeModelResourceReloadVetoListener(ModelResourceReloadVetoListener listener) {
   CoreArgCheck.isNotNull(listener);
   ModelWorkspaceManager.getModelWorkspaceManager()
       .removeModelResourceReloadVetoListener(listener);
 }
Ejemplo n.º 8
0
 /* (non-Javadoc)
  * @See org.teiid.designer.core.workspace.ModelWorkspace#removeNotificationListener(org.teiid.designer.core.workspace.ModelWorkspaceNotificationListener)
  */
 @Override
 public void removeNotificationListener(ModelWorkspaceNotificationListener listener) {
   CoreArgCheck.isNotNull(listener);
   ModelWorkspaceManager.getModelWorkspaceManager().removeNotificationListener(listener);
 }
Ejemplo n.º 9
0
 /* (non-Javadoc)
  * @See org.teiid.designer.core.workspace.ModelWorkspace#findModelResource(org.eclipse.emf.ecore.resource.Resource)
  */
 @Override
 public ModelResource findModelResource(final Resource resource) {
   CoreArgCheck.isNotNull(resource);
   return ModelWorkspaceManager.getModelWorkspaceManager().findModelResource(resource);
 }
Ejemplo n.º 10
0
 public ModelWorkspaceItem getWorkspaceItem(final IPath path) {
   CoreArgCheck.isNotNull(path);
   try {
     // first get all the projects
     ModelProject[] projects = getModelProjects();
     for (int i = 0; i < projects.length; i++) {
       ModelProject project = projects[i];
       if (!project.exists()) {
         continue;
       }
       if (!project.isOpen()) {
         // See if the underlying project is open ...
         final IProject iproj = (IProject) project.getResource();
         if (!iproj.isOpen()) {
           continue;
         }
         // Try to open the ModelProject, since the IProject is open ...
         project.open(null);
         if (!project.isOpen()) {
           continue; // couldn't open it!
         }
       }
       if (project.getPath().equals(path)) {
         return project;
       }
       // Iterate over all the path segments navigating to the child by name
       ModelWorkspaceItem item = project;
       final String[] segments = path.segments();
       for (int j = 1; j < segments.length; j++) {
         final String segment = segments[j];
         if (!item.exists()) {
           // Must be in the process of closing (see defect 10957) ...
           return null;
         }
         final IResource itemResource = item.getResource();
         item = item.getChild(segment);
         if (item == null) {
           // May be a newly created IResource for which there is yet no ModelWorkspaceItem
           if (itemResource instanceof IContainer) {
             final IContainer itemContainer = (IContainer) itemResource;
             final IResource child = itemContainer.findMember(segment);
             if (child != null) {
               // Find the ModelWorkspaceItem ...
               item =
                   ModelWorkspaceManager.getModelWorkspaceManager()
                       .findModelWorkspaceItem(child, true);
             }
           }
         }
         if (item == null) {
           break;
         } else if (item.getPath().equals(path)) {
           return item;
         }
       }
     }
   } catch (ModelWorkspaceException e) {
     // do nothing
   }
   return null;
 }