001: // THIS SOFTWARE IS PROVIDED BY SOFTARIS PTY.LTD. AND OTHER METABOSS
002: // CONTRIBUTORS ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING,
003: // BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
004: // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SOFTARIS PTY.LTD.
005: // OR OTHER METABOSS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
006: // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
007: // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
008: // OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
009: // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
010: // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
011: // EVEN IF SOFTARIS PTY.LTD. OR OTHER METABOSS CONTRIBUTORS ARE ADVISED OF THE
012: // POSSIBILITY OF SUCH DAMAGE.
013: //
014: // Copyright 2000-2005 © Softaris Pty.Ltd. All Rights Reserved.
015: package com.metaboss.sdlctools.applications.examples;
016:
017: import java.io.File;
018:
019: import javax.naming.Context;
020: import javax.naming.InitialContext;
021:
022: import org.apache.commons.logging.Log;
023: import org.apache.commons.logging.LogFactory;
024: import org.apache.log4j.PropertyConfigurator;
025:
026: import com.metaboss.enterprise.BaseException;
027: import com.metaboss.sdlctools.models.ModelRepository;
028: import com.metaboss.sdlctools.models.ModelValidationException;
029: import com.metaboss.sdlctools.models.metabossmodel.MetaBossModelPackage;
030: import com.metaboss.sdlctools.models.metabossmodel.enterprisemodel.Enterprise;
031: import com.metaboss.sdlctools.models.metabossmodel.enterprisemodel.SystemClass;
032:
033: /** This example shows how to create a new model element
034: * To change the template for this generated type comment go to
035: * Window>Preferences>Java>Code Generation>Code and Comments
036: */
037: public class CreatingNewModelElementExample {
038: // Commons Logging instance.
039: private static final Log sLogger;
040: static {
041: // Configure logger as early as possible
042: PropertyConfigurator.configure(System.getProperties());
043: sLogger = LogFactory
044: .getLog(CreatingNewModelElementExample.class);
045: }
046:
047: // Initialise enterprise model properties
048: private static File sEnterpriseModelRootFile = new File(
049: ModelProperties.sEnterpriseModelsRootDirectory
050: .getAbsolutePath()
051: + File.separator + "HatMaker\\Model.xml");
052:
053: public static void main(String[] args) {
054: try {
055: ModelRepository lModelRepository = null;
056: try {
057: Context lContext = new InitialContext();
058: lModelRepository = (ModelRepository) lContext
059: .lookup(ModelRepository.COMPONENT_URL);
060: sLogger.info("Opening HatMaker model...");
061: lModelRepository.openModel("Enterprises.HatMaker",
062: sEnterpriseModelRootFile, "MetaBossMetaModel");
063: sLogger.info("Validating the model...");
064: lModelRepository.validateModel("Enterprises.HatMaker");
065: sLogger.info("Done validating the model...");
066: if (lModelRepository
067: .isModelModified("Enterprises.HatMaker"))
068: sLogger.error("Model is modified (unexpected)");
069: else
070: sLogger.info("Model is not modified (expected)");
071: MetaBossModelPackage lMetaBossModelPackage = (MetaBossModelPackage) lModelRepository
072: .getModelExtent("Enterprises.HatMaker");
073:
074: sLogger
075: .info("Testing if we can add system to the enteprise...");
076: lModelRepository.beginTransaction();
077: try {
078: Enterprise lEnterprise = (Enterprise) lMetaBossModelPackage
079: .getModelElement().getByRef("Enterprise");
080: SystemClass lSystemClass = lMetaBossModelPackage
081: .getEnterpriseModel().getSystem();
082: com.metaboss.sdlctools.models.metabossmodel.enterprisemodel.System lSystem = lSystemClass
083: .createSystem();
084: lSystem.setEnterprise(lEnterprise);
085: sLogger
086: .info("Done adding system to the enterprise. System Name is "
087: + lSystem.getName());
088: lModelRepository.commitTransaction();
089: sLogger.info("Done committing. System Name is "
090: + lSystem.getName());
091: if (lModelRepository
092: .isModelModified("Enterprises.HatMaker"))
093: sLogger.info("Model is modified (expected)");
094: else
095: sLogger
096: .error("Model is not modified (unexpected)");
097: // lModelRepository.saveModel("Enterprises.HatMaker",true);
098: } finally {
099: if (lModelRepository.isInTransaction())
100: lModelRepository.rollbackTransaction();
101: }
102:
103: // sLogger.info("Testing if we are unable to create second enterprise...");
104: // lModelRepository.beginTransaction();
105: // try
106: // {
107: // EnterpriseClass lEnterpriseClass = lMetaBossModelPackage.getEnterpriseModel().getEnterprise();
108: // Enterprise lNewEnterprise = lEnterpriseClass.createEnterprise();
109: // sLogger.info("Should never get here.");
110: //
111: // lModelRepository.commitTransaction();
112: // lModelRepository.saveModel("Enterprises.HatMaker",true);
113: // }
114: // finally
115: // {
116: // if (lModelRepository.isInTransaction())
117: // lModelRepository.rollbackTransaction();
118: // }
119:
120: // sLogger.info("Testing if we are unable to have less than or more than 2 association roles in the association...");
121: // lModelRepository.beginTransaction();
122: // try
123: // {
124: // AssociationClass lAssociationClass = lMetaBossModelPackage.getEnterpriseModel().getSystemImplementationModel().getAssociation();
125: // AssociationRoleClass lAssociationRoleClass = lMetaBossModelPackage.getEnterpriseModel().getSystemImplementationModel().getAssociationRole();
126: //
127: // // get any association
128: // Iterator lAssociationsIterator = lAssociationClass.refAllOfType().iterator();
129: // {
130: // Association lFirstAssociation = (Association)lAssociationsIterator.next();
131: // sLogger.info("Working on " + lFirstAssociation.getRef());
132: // List lRoles = lFirstAssociation.getRoles();
133: // sLogger.info("Found " + lRoles.size() + " roles");
134: // AssociationRole lRoleA = (AssociationRole)lRoles.get(1);
135: // sLogger.info("Removing " + lRoleA.getRef());
136: // lRoles.remove(lRoleA);
137: // sLogger.info("Successfully removed association role.");
138: // }
139: //
140: // {
141: // Association lSecondAssociation = (Association)lAssociationsIterator.next();
142: // sLogger.info("Working on " + lSecondAssociation.getRef());
143: // List lRoles = lSecondAssociation.getRoles();
144: // sLogger.info("Found " + lRoles.size() + " roles");
145: // AssociationRole lRoleC = lAssociationRoleClass.createAssociationRole();
146: // lRoleC.setName("Test");
147: // lRoleC.setCardinality(AssociationRoleCardinalityEnum.ONE);
148: // lRoleC.setAggregationType(AggregationTypeEnum.NONE);
149: // sLogger.info("Adding another role");
150: // lRoles.add(lRoleC);
151: // sLogger.info("Successfully added association role." + lRoleC.getRef());
152: // }
153: //
154: // lModelRepository.commitTransaction();
155: // lModelRepository.saveModel("Enterprises.HatMaker",true);
156: // }
157: // finally
158: // {
159: // if (lModelRepository.isInTransaction())
160: // lModelRepository.rollbackTransaction();
161: // }
162:
163: // sLogger.info("Testing if we can create Association...");
164: // lModelRepository.beginTransaction();
165: // try
166: // {
167: // AssociationClass lAssociationClass = lMetaBossModelPackage.getEnterpriseModel().getSystemImplementationModel().getAssociation();
168: // // get any domain
169: // Domain lDomain = (Domain)lMetaBossModelPackage.getEnterpriseModel().getSystemImplementationModel().getDomain().refAllOfClass().iterator().next();
170: // Association lAssociation = lAssociationClass.createAssociation();
171: // lDomain.getAssociations().add(lAssociation);
172: // lModelRepository.commitTransaction();
173: // AssociationRole lRole1 = (AssociationRole)lAssociation.getRoles().get(0);
174: // AssociationRole lRole2 = (AssociationRole)lAssociation.getRoles().get(1);
175: // sLogger.info("Association :" + lAssociation.toString());
176: // sLogger.info("Role1 :" + lRole1.toString());
177: // sLogger.info("Role2 :" + lRole2.toString());
178: // sLogger.info("Successfully added association, now remove it");
179: // lModelRepository.beginTransaction();
180: // lAssociation.refDelete();
181: // lModelRepository.commitTransaction();
182: // sLogger.info("Association :" + lAssociation.toString());
183: // sLogger.info("Role1 :" + lRole1.toString());
184: // sLogger.info("Role2 :" + lRole2.toString());
185: // sLogger.info("Successfully removed association, now remove it");
186: // sLogger.info("Validating the model...");
187: // lModelRepository.validateModel("Enterprises.HatMaker");
188: // sLogger.info("Done validating the model...");
189: // lModelRepository.saveModel("Enterprises.HatMaker",true);
190: // }
191: // finally
192: // {
193: // if (lModelRepository.isInTransaction())
194: // lModelRepository.rollbackTransaction();
195: // }
196: //
197: } finally {
198: if (lModelRepository != null)
199: lModelRepository.close();
200: }
201: } catch (Throwable t) {
202: handleException(t);
203: }
204: }
205:
206: // This helper must be called from all tools when exception has been caught
207: // it will print the exception in the best possible manner
208: static void handleException(Throwable pThrowable) {
209: System.out.println("Caught exception "
210: + pThrowable.getClass().getName());
211: // Special case for model validation exception - it has explanation
212: if (pThrowable instanceof ModelValidationException) {
213: System.out.println(((ModelValidationException) pThrowable)
214: .getFullExplanation());
215: pThrowable.printStackTrace(System.out);
216: } else if (pThrowable instanceof BaseException) {
217: pThrowable.printStackTrace(System.out);
218: Throwable t = pThrowable.getCause();
219: while (t != null) {
220: System.out.println();
221: System.out.println();
222: System.out.println("Cause : " + t.getClass().getName());
223: t.printStackTrace(System.out);
224: // Special case for model validation exception - it has explanation
225: if (t instanceof ModelValidationException) {
226: System.out.println(((ModelValidationException) t)
227: .getFullExplanation());
228: break;
229: } else if (t instanceof BaseException) {
230: t = ((BaseException) t).getCause();
231: } else
232: break;
233: }
234: } else {
235: System.out.println(pThrowable.getMessage());
236: pThrowable.printStackTrace(System.out);
237: }
238: }
239: }
|