Skip to content

Commit

Permalink
TEIIDDES-1403
Browse files Browse the repository at this point in the history
Added extension property to ModelAnnotation for vdb name, locked and version
Changed VDB Editor and VDB framework to look for dependent source files and do not add to VDB
Changed IResource isReadOnly() calls to check for VDB source models too so these models are read-only even if file system says "writeable"
  • Loading branch information
blafond authored and elvisisking committed Sep 17, 2012
1 parent 89c23e1 commit a4ff46e
Show file tree
Hide file tree
Showing 42 changed files with 994 additions and 76 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,16 @@
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IExtension;
Expand Down Expand Up @@ -93,29 +96,86 @@ public static void buildResources( final IProgressMonitor monitor,
// not modified
final List modifiedResources = getModifiedResources();

// collection of models dependent on the models being validated
Set<IResource> dependentModels = new HashSet<IResource>();
Map<IProject, Collection<IResource>> projToResMap = getProjectToResourcesMap(iResources);

for (final Iterator rsourceIter = iResources.iterator(); rsourceIter.hasNext();) {
IResource resource = (IResource)rsourceIter.next();
Collection models = WorkspaceResourceFinderUtil.getResourcesThatUse(resource);
models.removeAll(iResources);
dependentModels.addAll(models);
// collection of models dependent on the models being validated
Set<IResource> indexedResources = new HashSet<IResource>();

for( IProject proj : projToResMap.keySet() ) {
Collection<IResource> projectIResources = projToResMap.get(proj);
Set<IResource> dependentModels = new HashSet<IResource>();

for (final Iterator resourceIter = projectIResources.iterator(); resourceIter.hasNext();) {
IResource resource = (IResource)resourceIter.next();
Collection models = WorkspaceResourceFinderUtil.getResourcesThatUse(resource);
models.removeAll(projectIResources);
dependentModels.addAll(models);
}

// index all the resources
// Filter out any IResources that have already been indexed
Set<IResource> unIndexedResources = new HashSet<IResource>();
for( IResource theRes : projectIResources ) {
if( !indexedResources.contains(theRes) ) {
unIndexedResources.add(theRes);
}
}
indexResources(monitor, unIndexedResources);
indexedResources.addAll(unIndexedResources);

unIndexedResources = new HashSet<IResource>();
for( IResource theRes : dependentModels ) {
if( !indexedResources.contains(theRes) ) {
unIndexedResources.add(theRes);
}
}
indexResources(monitor, unIndexedResources);
indexedResources.addAll(unIndexedResources);
}

// index all the resources
indexResources(monitor, iResources);
indexResources(monitor, dependentModels);

// Reset the modified state of all EMF resources to what it was
// prior to indexing. This needs to be done since indexing may
// mark an XSD resource as modified causing the XSDResourceValidator
// to not validate it.
setModifiedResources(modifiedResources);

// validate all the resources
validateResources(monitor, iResources, container, validateInContext);
validateResources(monitor, dependentModels, container, validateInContext);
// collection of models dependent on the models being validated
Set<IResource> validatedResources = new HashSet<IResource>();

for( IProject proj : projToResMap.keySet() ) {
Collection<IResource> projectIResources = projToResMap.get(proj);
Set<IResource> dependentModels = new HashSet<IResource>();

for (final Iterator resourceIter = projectIResources.iterator(); resourceIter.hasNext();) {
IResource resource = (IResource)resourceIter.next();
Collection models = WorkspaceResourceFinderUtil.getResourcesThatUse(resource);
models.removeAll(projectIResources);
dependentModels.addAll(models);
}

// index all the resources
// Filter out any IResources that have already been indexed
Set<IResource> unValidatedResources = new HashSet<IResource>();
for( IResource theRes : projectIResources ) {
if( !validatedResources.contains(theRes) ) {
unValidatedResources.add(theRes);
}
}

validateResources(monitor, unValidatedResources, container, validateInContext);
validatedResources.addAll(unValidatedResources);

unValidatedResources = new HashSet<IResource>();
for( IResource theRes : dependentModels ) {
if( !validatedResources.contains(theRes) ) {
unValidatedResources.add(theRes);
}
}

validateResources(monitor, unValidatedResources, container, validateInContext);
validatedResources.addAll(unValidatedResources);
}


// Reset the modified state of all EMF resources to what it was prior to validating
setModifiedResources(modifiedResources);
Expand Down Expand Up @@ -603,6 +663,8 @@ public static void validateResources( final IProgressMonitor monitor,

// set the resource scope (all model resources in open model projects)
final ModelWorkspace workspace = ModelerCore.getModelWorkspace();

// Find project for each IResource

try {
final Resource[] resourcesInScope = getWorkspaceResourcesInScope(workspace);
Expand Down Expand Up @@ -689,5 +751,22 @@ public static void validateResources( final IProgressMonitor monitor,
// #############################################################################
// # Protected methods
// #############################################################################

private static Map<IProject, Collection<IResource>> getProjectToResourcesMap(Collection iResources) {
Map<IProject, Collection<IResource>> map = new HashMap<IProject, Collection<IResource>>(10);

for( Object res : iResources ) {
IResource iResource = (IResource)res;
IProject proj = iResource.getProject();
Collection<IResource> resList = map.get(proj);
if( resList == null ) {
resList = new ArrayList<IResource>(10);
}
resList.add(iResource);
map.put(proj, resList);
}

return map;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ public boolean isReadOnly() {
if (this.file == null) {
return this.readonly;
}
return this.file.isReadOnly();
return ModelUtil.isIResourceReadOnly(this.file);
}

/**
Expand Down Expand Up @@ -468,7 +468,7 @@ public void save( final IProgressMonitor progress,
return;
}

if (this.file.isReadOnly()) {
if (ModelUtil.isIResourceReadOnly(file)) {
final String pathInProj = this.file.getProject().getName() + IPath.SEPARATOR + this.file.getProjectRelativePath();
final Object[] params = new Object[] {pathInProj};
throw new ModelWorkspaceException(ModelerCore.Util.getString("ModelBufferImpl.Model_is_readonly", params)); //$NON-NLS-1$
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -323,6 +323,9 @@ public boolean isReadOnly() {
// There are never errors if not opened ...
return true;
}
if( this.isLoaded() && ModelUtil.isVdbSourceObject(this)) {
return true;
}
return ModelUtil.isIResourceReadOnly(getResource());
}

Expand Down

0 comments on commit a4ff46e

Please sign in to comment.