Author: tfmorris
Date: 2008-07-30 11:30:27-0700
New Revision: 15409
Modified:
trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/MDRModelImplementation.java
trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/ModelManagementHelperMDRImpl.java
trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/UmlFactoryMDRImpl.java
trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/XmiReaderImpl.java
Log:
Issue 5245: Improve extent management
Modified: trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/MDRModelImplementation.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/MDRModelImplementation.java?view=diff&rev=15409&p1=trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/MDRModelImplementation.java&p2=trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/MDRModelImplementation.java&r1=15408&r2=15409
==============================================================================
--- trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/MDRModelImplementation.java (original)
+++ trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/MDRModelImplementation.java 2008-07-30 11:30:27-0700
@@ -39,7 +39,6 @@
import javax.jmi.model.ModelPackage;
import javax.jmi.model.MofPackage;
-import javax.jmi.reflect.RefObject;
import javax.jmi.reflect.RefPackage;
import javax.jmi.xmi.MalformedXMIException;
@@ -167,14 +166,6 @@
private ModelPackage mofExtent;
/**
- * Top level model element containing profile. This state is shared between
- * the XMI reader and writer. Elements which are read as part of a profile
- * (as indicated by the calling application) will be treated specially and
- * will not be written back out with the rest of the model data.
- */
- private Collection<RefObject> profileElements;
-
- /**
* Map of model elements to xmi.ids used to keep xmi.ids stable
* across read/write cycles.
*/
@@ -206,6 +197,9 @@
* before this will be possible.
*/
UmlPackage getUmlPackage() {
+ if (umlPackage == null) {
+ LOG.debug("umlPackage is null - no current extent");
+ }
return umlPackage;
}
@@ -434,16 +428,18 @@
// Create a default extent for the user UML model. This will get
// replaced if a new model is read in from an XMI file.
umlPackage = (UmlPackage) repository.getExtent(MODEL_EXTENT_NAME);
- LOG.debug("MDR Init - tried to get UML extent");
if (umlPackage != null) {
// NOTE: If we switch to a persistent repository like the b-tree
// repository we'll want to keep the old extent(s) around
+ extents.remove(umlPackage);
umlPackage.refDelete();
umlPackage = null;
LOG.debug("MDR Init - UML extent existed - "
+ "deleted it and all UML data");
}
umlPackage = (UmlPackage) createExtent(MODEL_EXTENT_NAME);
+ extents.put(umlPackage, Boolean.FALSE);
+ LOG.debug("Created default extent");
}
/**
@@ -719,21 +715,6 @@
String version) throws UmlException {
return new XmiWriterMDRImpl(this, model, stream, version);
}
-
- /**
- * @return the collection of model elements which make up the profile.
- */
- protected Collection<RefObject> getProfileElements() {
- return profileElements;
- }
-
- /**
- * Save the given elements as belonging to the profile.
- * @param elements collection of model elements.
- */
- protected void setProfileElements(Collection<RefObject> elements) {
- profileElements = elements;
- }
/**
* Return the Object to ID Map.
Modified: trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/ModelManagementHelperMDRImpl.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/ModelManagementHelperMDRImpl.java?view=diff&rev=15409&p1=trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/ModelManagementHelperMDRImpl.java&p2=trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/ModelManagementHelperMDRImpl.java&r1=15408&r2=15409
==============================================================================
--- trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/ModelManagementHelperMDRImpl.java (original)
+++ trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/ModelManagementHelperMDRImpl.java 2008-07-30 11:30:27-0700
@@ -207,11 +207,15 @@
List names = elem.getQualifiedName();
// Although this only handles one level of package, it is
// OK for UML 1.4 because of clustering
- RefPackage pkg = ((RefObject) nsa).refOutermostPackage()
- .refPackage((String) names.get(0));
- // Get the metatype proxy and use it to find all instances
- RefClass classProxy = pkg.refClass((String) names.get(1));
- allOfType = classProxy.refAllOfType();
+ try {
+ RefPackage pkg = ((RefObject) nsa).refOutermostPackage()
+ .refPackage((String) names.get(0));
+ // Get the metatype proxy and use it to find all instances
+ RefClass classProxy = pkg.refClass((String) names.get(1));
+ allOfType = classProxy.refAllOfType();
+ } catch (InvalidObjectException e) {
+ throw new InvalidElementException(e);
+ }
break;
}
}
Modified: trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/UmlFactoryMDRImpl.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/UmlFactoryMDRImpl.java?view=diff&rev=15409&p1=trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/UmlFactoryMDRImpl.java&p2=trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/UmlFactoryMDRImpl.java&r1=15408&r2=15409
==============================================================================
--- trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/UmlFactoryMDRImpl.java (original)
+++ trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/UmlFactoryMDRImpl.java 2008-07-30 11:30:27-0700
@@ -1253,9 +1253,16 @@
}
public void deleteExtent(Object element) {
- RefPackage extent = ((RefObject) element).refOutermostPackage();
- modelImpl.removeExtent((org.omg.uml.UmlPackage) extent);
- extent.refDelete();
+ try {
+ org.omg.uml.UmlPackage extent =
+ (org.omg.uml.UmlPackage) ((RefObject) element)
+ .refOutermostPackage();
+ LOG.debug("Removing extent " + extent);
+ modelImpl.removeExtent(extent);
+ extent.refDelete();
+ } catch (InvalidObjectException e) {
+ throw new InvalidElementException(e);
+ }
}
}
Modified: trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/XmiReaderImpl.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/XmiReaderImpl.java?view=diff&rev=15409&p1=trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/XmiReaderImpl.java&p2=trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/XmiReaderImpl.java&r1=15408&r2=15409
==============================================================================
--- trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/XmiReaderImpl.java (original)
+++ trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/XmiReaderImpl.java 2008-07-30 11:30:27-0700
@@ -88,8 +88,6 @@
private XmiReferenceResolverImpl resolver;
- private RefPackage modelPackage;
-
/**
* Flag indicating unknown element was found in XMI file.
*/
@@ -150,24 +148,32 @@
Collection<RefObject> newElements = Collections.emptyList();
- String extentName = inputSource.getSystemId();
- if (extentName == null) {
- extentName = inputSource.getPublicId();
- }
- if (extentName == null) {
- extentName = modelImpl.MODEL_EXTENT_NAME;
- }
- RefPackage extent = modelImpl.getRepository().getExtent(extentName);
- if (extent != null) {
- LOG.warn("Using existing extent " + extentName);
- // extent.refDelete();
- } else {
- extent = modelImpl.createExtent(inputSource.getSystemId());
- modelImpl.addExtent((UmlPackage) extent, readOnly);
+ String extentBase = inputSource.getSystemId();
+ if (extentBase == null) {
+ extentBase = inputSource.getPublicId();
+ }
+ if (extentBase == null) {
+ extentBase = MDRModelImplementation.MODEL_EXTENT_NAME;
+ }
+ String extentName = extentBase;
+ UmlPackage extent =
+ (UmlPackage) modelImpl.getRepository().getExtent(extentName);
+ int serial = 1;
+ while (extent != null) {
+ extentName = extentBase + " " + serial;
+ serial++;
+ extent = (UmlPackage) modelImpl.getRepository().getExtent(
+ extentName);
+ }
+
+ extent = (UmlPackage) modelImpl.createExtent(extentName);
+ if (extent == null) {
+ LOG.error("Failed to create extent " + extentName);
}
+ modelImpl.addExtent(extent, readOnly);
try {
- LOG.info("Loading to extent'" + extentName + "'");
+ LOG.info("Loading to extent '" + extentName + "'");
InputConfig config = new InputConfig();
config.setUnknownElementsListener(this);
@@ -220,8 +226,8 @@
File file = copySource(inputSource);
systemId = file.toURI().toURL().toExternalForm();
inputSource = new InputSource(systemId);
- newElements =
- xmiReader.read(inputSource.getByteStream(), systemId, extent);
+ newElements = xmiReader.read(inputSource.getByteStream(),
+ systemId, extent);
// If a UML 1.3 file, attempt to upgrade it to UML 1.4
if (uml13) {
@@ -242,6 +248,7 @@
}
if (unknownElement) {
+ modelImpl.removeExtent(extent);
throw new XmiException("Unknown element in XMI file : "
+ unknownElementName);
}
@@ -265,14 +272,13 @@
spe.getColumnNumber(), e);
}
}
+ modelImpl.removeExtent(extent);
throw new XmiException(e);
} catch (IOException e) {
+ modelImpl.removeExtent(extent);
throw new XmiException(e);
}
- if (readOnly) {
- modelImpl.setProfileElements(newElements);
- }
return newElements;
}
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.