@Before public void init() { List<OclReal> realSequence = new ArrayList<OclReal>(); realSequence.add(oclReal0_5); oclSequence = myStandardLibraryFactory.createOclSequence( realSequence, EssentialOclPlugin.getOclLibraryProvider().getOclLibrary().getOclReal()); realSequence.add(oclReal1_5); realSequence.add(undefined); oclSequence2 = myStandardLibraryFactory.createOclSequence( realSequence, EssentialOclPlugin.getOclLibraryProvider().getOclLibrary().getOclReal()); List<OclReal> realSequence2 = new ArrayList<OclReal>(); realSequence2.add(oclReal0_5); realSequence2.add(oclReal0_5); realSequence2.add(oclReal1_5); realSequence2.add(undefined); oclSequence3 = myStandardLibraryFactory.createOclSequence( realSequence2, EssentialOclPlugin.getOclLibraryProvider().getOclLibrary().getOclReal()); }
/* (non-Javadoc) * @see tudresden.ocl20.pivot.pivotmodel.base.AbstractProperty#getType() */ @Override public Type getType() { Type elementType = this.factory.createType(dslColumn.getType()); if (dslColumn.getType().getName().contains(" ARRAY") || dslColumn.getType().getName().contains("[]") || dslColumn.getType().getName().contains("[ ]")) { elementType = EssentialOclPlugin.getOclLibraryProvider().getOclLibrary().getBagType(elementType); } return elementType; }
/** * Tests for sequences in OCL. * * @author Michael Thiele */ public class JavaOclSequenceTest { private final IStandardLibraryFactory myStandardLibraryFactory = TestPerformer.getInstance().getSLFactory(); private final OclSequence<OclReal> emptySequence = myStandardLibraryFactory.createOclSequence( new ArrayList<OclReal>(), EssentialOclPlugin.getOclLibraryProvider().getOclLibrary().getOclAny()); /** Sequence { 0.5 } */ private OclSequence<OclReal> oclSequence; /** Sequence { 0.5, 1.5, null } */ private OclSequence<OclReal> oclSequence2; /** Sequence { 0.5, 0.5, 1.5, null } */ private OclSequence<OclReal> oclSequence3; private final OclReal oclReal0_5 = myStandardLibraryFactory.createOclReal(0.5); private final OclReal oclReal1_5 = myStandardLibraryFactory.createOclReal(1.5); private final OclInteger integer0 = myStandardLibraryFactory.createOclInteger(0L); private final OclInteger integer1 = myStandardLibraryFactory.createOclInteger(1L); private final OclInteger integer2 = myStandardLibraryFactory.createOclInteger(2L); private final OclInteger integer3 = myStandardLibraryFactory.createOclInteger(3L); private final OclInteger integer4 = myStandardLibraryFactory.createOclInteger(4L); private final OclReal undefined = (OclReal) myStandardLibraryFactory.createOclUndefined( oclReal0_5.getModelInstanceReal().getType(), "undefined value"); @Before public void init() { List<OclReal> realSequence = new ArrayList<OclReal>(); realSequence.add(oclReal0_5); oclSequence = myStandardLibraryFactory.createOclSequence( realSequence, EssentialOclPlugin.getOclLibraryProvider().getOclLibrary().getOclReal()); realSequence.add(oclReal1_5); realSequence.add(undefined); oclSequence2 = myStandardLibraryFactory.createOclSequence( realSequence, EssentialOclPlugin.getOclLibraryProvider().getOclLibrary().getOclReal()); List<OclReal> realSequence2 = new ArrayList<OclReal>(); realSequence2.add(oclReal0_5); realSequence2.add(oclReal0_5); realSequence2.add(oclReal1_5); realSequence2.add(undefined); oclSequence3 = myStandardLibraryFactory.createOclSequence( realSequence2, EssentialOclPlugin.getOclLibraryProvider().getOclLibrary().getOclReal()); } @Test public void testAppend() { assertTrue(emptySequence.append(oclReal0_5).isEqualTo(oclSequence).isTrue()); assertTrue(emptySequence.isEmpty().isTrue()); assertTrue(oclSequence.append(oclReal1_5).append(undefined).isEqualTo(oclSequence2).isTrue()); assertTrue(oclSequence.size().isEqualTo(integer1).isTrue()); } @Test public void testExcluding() { assertTrue(oclSequence.excluding(oclReal0_5).isEqualTo(emptySequence).isTrue()); assertTrue(oclSequence.size().isEqualTo(integer1).isTrue()); assertTrue(oclSequence.excluding(oclReal1_5).isEqualTo(oclSequence).isTrue()); assertTrue( oclSequence3 .excluding(oclReal0_5) .excluding(undefined) .excluding(oclReal1_5) .isEqualTo(emptySequence) .isTrue()); assertTrue(oclSequence3.size().isEqualTo(integer4).isTrue()); } @Test public void testIncluding() { assertTrue(emptySequence.including(oclReal0_5).isEqualTo(oclSequence).isTrue()); assertTrue(emptySequence.isEmpty().isTrue()); assertTrue( oclSequence.including(oclReal1_5).including(undefined).isEqualTo(oclSequence2).isTrue()); assertTrue(oclSequence.size().isEqualTo(integer1).isTrue()); } @Test public void testInsertAt() { assertTrue(emptySequence.insertAt(integer1, oclReal0_5).isEqualTo(oclSequence).isTrue()); assertTrue(emptySequence.isEmpty().isTrue()); assertTrue(emptySequence.insertAt(integer0, oclReal0_5).oclIsInvalid().isTrue()); assertTrue(emptySequence.isEmpty().isTrue()); assertTrue( oclSequence .insertAt(integer2, undefined) .insertAt(integer2, oclReal1_5) .insertAt(integer2, oclReal0_5) .isEqualTo(oclSequence3) .isTrue()); assertTrue(oclSequence.size().isEqualTo(integer1).isTrue()); assertTrue( oclSequence .insertAt(integer1, oclReal0_5) .insertAt(integer4, oclReal1_5) .oclIsInvalid() .isTrue()); } @Test public void testPrepend() { assertTrue(emptySequence.prepend(oclReal0_5).isEqualTo(oclSequence).isTrue()); assertTrue(emptySequence.isEmpty().isTrue()); assertTrue(oclSequence2.prepend(oclReal0_5).isEqualTo(oclSequence3).isTrue()); assertTrue(oclSequence2.size().isEqualTo(integer3).isTrue()); } @Test public void testSubSequence() { assertTrue(emptySequence.subSequence(integer1, integer1).oclIsInvalid().isTrue()); assertTrue(oclSequence.subSequence(integer1, integer1).isEqualTo(oclSequence).isTrue()); assertTrue(oclSequence.subSequence(integer0, integer1).oclIsInvalid().isTrue()); assertTrue(oclSequence3.subSequence(integer2, integer4).isEqualTo(oclSequence2).isTrue()); assertTrue(oclSequence3.subSequence(integer2, integer1).oclIsInvalid().isTrue()); } @Test public void testUnion() { assertTrue(oclSequence.union(oclSequence2).isEqualTo(oclSequence3).isTrue()); assertTrue(oclSequence.size().isEqualTo(integer1).isTrue()); assertTrue(oclSequence2.size().isEqualTo(integer3).isTrue()); assertTrue(emptySequence.union(emptySequence).isEqualTo(emptySequence).isTrue()); assertTrue(emptySequence.union(oclSequence).isEqualTo(oclSequence).isTrue()); assertTrue(emptySequence.isEmpty().isTrue()); assertTrue(oclSequence.size().isEqualTo(integer1).isTrue()); assertTrue(oclSequence.union(emptySequence).isEqualTo(oclSequence).isTrue()); assertTrue(emptySequence.isEmpty().isTrue()); assertTrue(oclSequence.size().isEqualTo(integer1).isTrue()); } }
/** * An {@link ITypeResolver} helps in finding {@link Type}s. These can either be located in the * {@link OclLibrary} or in an associated {@link IModel}. * * @author Matthias Braeuer */ public class TypeResolver { /** The {@link Logger} for this class. */ private static final Logger LOGGER = EssentialOclPlugin.getLogger(TypeResolver.class); /** The associated {@link OclLibrary}. */ private OclLibrary oclLibrary; /** Cache for the predefined {@link Type}s from the OCL Standard library. */ private Map<String, Type> predefinedTypes; /** * Creates a new default {@link TypeResolver}. * * @param oclLibrary The associated {@link OclLibrary}, must not be <code>null</code>. */ public TypeResolver(OclLibrary oclLibrary) { /* * Should not happen in the default implementation, but clients may create * own type resolvers. */ if (oclLibrary == null) { throw new IllegalArgumentException( "The reference to the associated OCL standard library must not be null."); //$NON-NLS-1$ } // no else. this.oclLibrary = oclLibrary; } /** * Looks up a {@link Type} in the OCL library or in the associated {@link IModel}. * * @param pathName The path name of the {@link Type} to look for. * @return A {@link Type} instance. * @throws IllegalArgumentException If the given pathname is either <code>null</code> or empty. * @throws ModelAccessException If something goes wrong when accessing the {@link IModel}. * @throws TypeNotFoundException If a {@link Type} with the given path name cannot be found. * @throws ModelBusException If a general configuration error occurs. */ public Type findType(List<String> pathName, IModel model) throws TypeNotFoundException, ModelAccessException { if (LOGGER.isDebugEnabled()) { LOGGER.debug("findType(pathName=" + pathName + ") - enter"); // $NON-NLS-1$ //$NON-NLS-2$ } // no else. Type type = null; if (pathName == null || pathName.isEmpty()) { throw new IllegalArgumentException("The path name must not be null or empty."); // $NON-NLS-1$ } // no else. /* Try to look up a primitive type. */ if (pathName.size() == 1) { type = this.getPredefinedTypes().get(pathName.get(0)); } // no else. /* If no primitive type found, try to look in the oclLibrary. */ if (type == null) { type = model.findType(pathName); } // no else. if (type == null) { throw new TypeNotFoundException( "Unable to find type '" + pathName + "'."); // $NON-NLS-1$//$NON-NLS-2$ } // no else. if (LOGGER.isDebugEnabled()) { LOGGER.debug("findType() - exit - return value=" + type); // $NON-NLS-1$ } // no else. return type; } /** Helper method to initialize the cache with the primitive types. */ protected void initializePredefinedTypes(OclLibrary oclLibrary) { this.predefinedTypes.put(oclLibrary.getOclAny().getName(), oclLibrary.getOclAny()); this.predefinedTypes.put(oclLibrary.getOclType().getName(), oclLibrary.getOclType()); this.predefinedTypes.put(oclLibrary.getOclVoid().getName(), oclLibrary.getOclVoid()); this.predefinedTypes.put(oclLibrary.getOclInvalid().getName(), oclLibrary.getOclInvalid()); this.predefinedTypes.put(oclLibrary.getOclBoolean().getName(), oclLibrary.getOclBoolean()); this.predefinedTypes.put(oclLibrary.getOclInteger().getName(), oclLibrary.getOclInteger()); this.predefinedTypes.put(oclLibrary.getOclReal().getName(), oclLibrary.getOclReal()); this.predefinedTypes.put(oclLibrary.getOclString().getName(), oclLibrary.getOclString()); this.predefinedTypes.put( oclLibrary.getOclCollection().getName(), oclLibrary.getOclCollection()); this.predefinedTypes.put(oclLibrary.getOclSequence().getName(), oclLibrary.getOclSequence()); this.predefinedTypes.put(oclLibrary.getOclBag().getName(), oclLibrary.getOclBag()); this.predefinedTypes.put(oclLibrary.getOclSet().getName(), oclLibrary.getOclSet()); this.predefinedTypes.put( oclLibrary.getOclOrderedSet().getName(), oclLibrary.getOclOrderedSet()); } /** A helper method to lazily get the OCL standard {@link Type}s. */ private Map<String, Type> getPredefinedTypes() { if (this.predefinedTypes == null) { /* Instantiate the map for the primitive types and initialize it. */ this.predefinedTypes = new HashMap<String, Type>(); this.initializePredefinedTypes(oclLibrary); } return this.predefinedTypes; } }