Skip to content
Snippets Groups Projects
Commit 58df3125 authored by Simon Spinner's avatar Simon Spinner
Browse files

Change repository classes to avoid duplication of templates.

parent aada6752
No related branches found
No related tags found
No related merge requests found
Showing with 96 additions and 41 deletions
...@@ -10,10 +10,14 @@ import tools.descartes.prisma.core.templates.ModelTemplate; ...@@ -10,10 +10,14 @@ import tools.descartes.prisma.core.templates.ModelTemplate;
public class InterfaceProvidingRoleTemplate extends ModelTemplate<InterfaceProvidingEntity, InterfaceProvidingRole> { public class InterfaceProvidingRoleTemplate extends ModelTemplate<InterfaceProvidingEntity, InterfaceProvidingRole> {
private final String portName; private final String portName;
private final InterfaceTemplate interfaceCmd; private final InterfaceTemplate interfaceCmd;
public InterfaceProvidingRoleTemplate(String portName, InterfaceTemplate addInterface) { public InterfaceProvidingRoleTemplate(String portName, InterfaceTemplate addInterface) {
super(RepositoryPackage.Literals.INTERFACE_PROVIDING_ENTITY__INTERFACE_PROVIDING_ROLES, InterfaceProvidingRole.class); this(Status.CREATE, portName, addInterface);
}
public InterfaceProvidingRoleTemplate(Status status, String portName, InterfaceTemplate addInterface) {
super(status, RepositoryPackage.Literals.INTERFACE_PROVIDING_ENTITY__INTERFACE_PROVIDING_ROLES, InterfaceProvidingRole.class);
this.portName = portName; this.portName = portName;
this.interfaceCmd = addInterface; this.interfaceCmd = addInterface;
} }
......
...@@ -11,9 +11,13 @@ public class InterfaceRequiringRoleTemplate extends ModelTemplate<InterfaceRequi ...@@ -11,9 +11,13 @@ public class InterfaceRequiringRoleTemplate extends ModelTemplate<InterfaceRequi
private final String portName; private final String portName;
private final InterfaceTemplate interfaceCmd; private final InterfaceTemplate interfaceCmd;
public InterfaceRequiringRoleTemplate(String portName, InterfaceTemplate addInterface) {
this(Status.CREATE, portName, addInterface);
}
public InterfaceRequiringRoleTemplate(InterfaceTemplate addInterface, String portName) { public InterfaceRequiringRoleTemplate(Status status, String portName, InterfaceTemplate addInterface) {
super(RepositoryPackage.Literals.INTERFACE_REQUIRING_ENTITY__INTERFACE_REQUIRING_ROLES, InterfaceRequiringRole.class); super(status, RepositoryPackage.Literals.INTERFACE_REQUIRING_ENTITY__INTERFACE_REQUIRING_ROLES, InterfaceRequiringRole.class);
this.portName = portName; this.portName = portName;
this.interfaceCmd = addInterface; this.interfaceCmd = addInterface;
} }
......
package tools.descartes.prisma.core.templates.repository; package tools.descartes.prisma.core.templates.repository;
import java.util.LinkedList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import edu.kit.ipd.descartes.mm.applicationlevel.repository.Interface; import edu.kit.ipd.descartes.mm.applicationlevel.repository.Interface;
import edu.kit.ipd.descartes.mm.applicationlevel.repository.Repository; import edu.kit.ipd.descartes.mm.applicationlevel.repository.Repository;
...@@ -12,12 +14,16 @@ import tools.descartes.prisma.core.templates.ModelTemplate; ...@@ -12,12 +14,16 @@ import tools.descartes.prisma.core.templates.ModelTemplate;
public class InterfaceTemplate extends ModelTemplate<Repository, Interface> { public class InterfaceTemplate extends ModelTemplate<Repository, Interface> {
private final String interfaceName; private final String interfaceName;
private final List<SignatureTemplate> signatures = new LinkedList<>(); private final Map<String, SignatureTemplate> signatures = new HashMap<>();
public InterfaceTemplate(String interfaceName) { public InterfaceTemplate(String interfaceName) {
super(RepositoryPackage.Literals.REPOSITORY__INTERFACES, Interface.class); super(RepositoryPackage.Literals.REPOSITORY__INTERFACES, Interface.class);
this.interfaceName = interfaceName; this.interfaceName = interfaceName;
} }
public String getName() {
return interfaceName;
}
@Override @Override
protected Interface create(Repository repository) { protected Interface create(Repository repository) {
...@@ -34,11 +40,15 @@ public class InterfaceTemplate extends ModelTemplate<Repository, Interface> { ...@@ -34,11 +40,15 @@ public class InterfaceTemplate extends ModelTemplate<Repository, Interface> {
@Override @Override
public List<? extends ModelTemplate<Interface, ?>> getChildCommands() { public List<? extends ModelTemplate<Interface, ?>> getChildCommands() {
return signatures; return new ArrayList<>(signatures.values());
} }
public InterfaceTemplate add(SignatureTemplate signature) { public SignatureTemplate defineSignature(String signatureName) {
signatures.add(signature); SignatureTemplate template = signatures.get(signatureName);
return this; if (template == null) {
template = new SignatureTemplate(signatureName);
signatures.put(signatureName, template);
}
return template;
} }
} }
...@@ -33,12 +33,15 @@ public class ProvidingDelegationConnectorTemplate extends ModelTemplate<Composed ...@@ -33,12 +33,15 @@ public class ProvidingDelegationConnectorTemplate extends ModelTemplate<Composed
InterfaceProvidingRole outerRole = outerRoleCmd.get(parent); InterfaceProvidingRole outerRole = outerRoleCmd.get(parent);
InterfaceProvidingRole innerRole = innerRoleCmd.get(assemblyContext.getEncapsulatedComponent()); InterfaceProvidingRole innerRole = innerRoleCmd.get(assemblyContext.getEncapsulatedComponent());
ProvidingDelegationConnector connector = RepositoryFactory.eINSTANCE.createProvidingDelegationConnector(); if (outerRole != null && innerRole != null) {
connector.setAssemblyContext(assemblyContext); ProvidingDelegationConnector connector = RepositoryFactory.eINSTANCE.createProvidingDelegationConnector();
connector.setInnerInterfaceProvidingRole(innerRole); connector.setAssemblyContext(assemblyContext);
connector.setOuterInterfaceProvidingRole(outerRole); connector.setInnerInterfaceProvidingRole(innerRole);
connector.setName(outerRole.getName() + " -> " + innerRole.getName()); connector.setOuterInterfaceProvidingRole(outerRole);
return connector; connector.setName(outerRole.getName() + " -> " + innerRole.getName());
return connector;
}
return null;
} }
} }
package tools.descartes.prisma.core.templates.repository; package tools.descartes.prisma.core.templates.repository;
import java.util.HashMap;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map;
import edu.kit.ipd.descartes.mm.applicationlevel.repository.Repository; import edu.kit.ipd.descartes.mm.applicationlevel.repository.Repository;
import edu.kit.ipd.descartes.mm.applicationlevel.repository.RepositoryComponent; import edu.kit.ipd.descartes.mm.applicationlevel.repository.RepositoryComponent;
...@@ -11,8 +13,8 @@ import tools.descartes.prisma.core.templates.ModelTemplate; ...@@ -11,8 +13,8 @@ import tools.descartes.prisma.core.templates.ModelTemplate;
public abstract class RepositoryComponentTemplate<E extends RepositoryComponent> extends ModelTemplate<Repository, E> { public abstract class RepositoryComponentTemplate<E extends RepositoryComponent> extends ModelTemplate<Repository, E> {
private final String componentName; private final String componentName;
private final List<InterfaceProvidingRoleTemplate> interfaceProvidingRoles = new LinkedList<>(); private final Map<String, InterfaceProvidingRoleTemplate> interfaceProvidingRoles = new HashMap<>();
private final List<InterfaceRequiringRoleTemplate> interfaceRequiringRoles = new LinkedList<>(); private final Map<String, InterfaceRequiringRoleTemplate> interfaceRequiringRoles = new HashMap<>();
protected RepositoryComponentTemplate(String componentName, Class<E> componentType) { protected RepositoryComponentTemplate(String componentName, Class<E> componentType) {
super(RepositoryPackage.Literals.REPOSITORY__COMPONENTS, componentType); super(RepositoryPackage.Literals.REPOSITORY__COMPONENTS, componentType);
...@@ -30,8 +32,8 @@ public abstract class RepositoryComponentTemplate<E extends RepositoryComponent> ...@@ -30,8 +32,8 @@ public abstract class RepositoryComponentTemplate<E extends RepositoryComponent>
@Override @Override
public List<ModelTemplate<? super E, ?>> getChildCommands() { public List<ModelTemplate<? super E, ?>> getChildCommands() {
List<ModelTemplate<? super E, ?>> list = new LinkedList<>(); List<ModelTemplate<? super E, ?>> list = new LinkedList<>();
list.addAll(interfaceProvidingRoles); list.addAll(interfaceProvidingRoles.values());
list.addAll(interfaceRequiringRoles); list.addAll(interfaceRequiringRoles.values());
return list; return list;
} }
...@@ -45,11 +47,21 @@ public abstract class RepositoryComponentTemplate<E extends RepositoryComponent> ...@@ -45,11 +47,21 @@ public abstract class RepositoryComponentTemplate<E extends RepositoryComponent>
protected abstract E createRepositoryComponent(); protected abstract E createRepositoryComponent();
public void add(InterfaceProvidingRoleTemplate providingRole) { public InterfaceProvidingRoleTemplate defineInterfaceProvidingRole(String portName, InterfaceTemplate interf) {
interfaceProvidingRoles.add(providingRole); InterfaceProvidingRoleTemplate template = interfaceProvidingRoles.get(portName);
if (template == null) {
template = new InterfaceProvidingRoleTemplate(portName, interf);
interfaceProvidingRoles.put(portName, template);
}
return template;
} }
public void add(InterfaceRequiringRoleTemplate requiringRole) { public InterfaceRequiringRoleTemplate defineInterfaceRequiringRole(String portName, InterfaceTemplate interf) {
interfaceRequiringRoles.add(requiringRole); InterfaceRequiringRoleTemplate template = interfaceRequiringRoles.get(portName);
if (template == null) {
template = new InterfaceRequiringRoleTemplate(portName, interf);
interfaceRequiringRoles.put(portName, template);
}
return template;
} }
} }
package tools.descartes.prisma.core.templates.repository; package tools.descartes.prisma.core.templates.repository;
import java.util.HashMap;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map;
import edu.kit.ipd.descartes.mm.applicationlevel.repository.Repository; import edu.kit.ipd.descartes.mm.applicationlevel.repository.Repository;
import edu.kit.ipd.descartes.mm.applicationlevel.repository.RepositoryFactory; import edu.kit.ipd.descartes.mm.applicationlevel.repository.RepositoryFactory;
...@@ -13,8 +15,8 @@ public class RepositoryTemplate extends ModelTemplate<Repository, Repository> { ...@@ -13,8 +15,8 @@ public class RepositoryTemplate extends ModelTemplate<Repository, Repository> {
super(null, Repository.class); super(null, Repository.class);
} }
private final List<InterfaceTemplate> interfaces = new LinkedList<>(); private final Map<String, InterfaceTemplate> interfaces = new HashMap<>();
private final List<RepositoryComponentTemplate<?>> components = new LinkedList<>(); private final Map<String, RepositoryComponentTemplate<?>> components = new HashMap<>();
@Override @Override
public Repository get(Repository parent) { public Repository get(Repository parent) {
...@@ -26,21 +28,38 @@ public class RepositoryTemplate extends ModelTemplate<Repository, Repository> { ...@@ -26,21 +28,38 @@ public class RepositoryTemplate extends ModelTemplate<Repository, Repository> {
return repo; return repo;
} }
public RepositoryTemplate add(InterfaceTemplate interf) { public InterfaceTemplate defineInterface(String name) {
interfaces.add(interf); InterfaceTemplate template = interfaces.get(name);
return this; if (template == null) {
template = new InterfaceTemplate(name);
interfaces.put(name, template);
}
return template;
} }
public RepositoryTemplate add(RepositoryComponentTemplate<?> component) { public BasicComponentTemplate defineBasicComponent(String name) {
components.add(component); BasicComponentTemplate template = (BasicComponentTemplate)components.get(name);
return this; if (template == null) {
template = new BasicComponentTemplate(name);
components.put(name, template);
}
return template;
}
public CompositeComponentTemplate defineCompositeComponent(String name) {
CompositeComponentTemplate template = (CompositeComponentTemplate)components.get(name);
if (template == null) {
template = new CompositeComponentTemplate(name);
components.put(name, template);
}
return template;
} }
@Override @Override
public List<ModelTemplate<Repository, ?>> getChildCommands() { public List<ModelTemplate<Repository, ?>> getChildCommands() {
List<ModelTemplate<Repository,?>> children = new LinkedList<>(); List<ModelTemplate<Repository,?>> children = new LinkedList<>();
children.addAll(interfaces); children.addAll(interfaces.values());
children.addAll(components); children.addAll(components.values());
return children; return children;
} }
......
...@@ -33,12 +33,15 @@ public class RequiringDelegationConnectorTemplate extends ModelTemplate<Composed ...@@ -33,12 +33,15 @@ public class RequiringDelegationConnectorTemplate extends ModelTemplate<Composed
InterfaceRequiringRole outerRole = outerRoleCmd.get(parent); InterfaceRequiringRole outerRole = outerRoleCmd.get(parent);
InterfaceRequiringRole innerRole = innerRoleCmd.get(assemblyContext.getEncapsulatedComponent()); InterfaceRequiringRole innerRole = innerRoleCmd.get(assemblyContext.getEncapsulatedComponent());
RequiringDelegationConnector connector = RepositoryFactory.eINSTANCE.createRequiringDelegationConnector(); if (outerRole != null && innerRole != null) {
connector.setAssemblyContext(assemblyContext); RequiringDelegationConnector connector = RepositoryFactory.eINSTANCE.createRequiringDelegationConnector();
connector.setInnerInterfaceRequiringRole(innerRole); connector.setAssemblyContext(assemblyContext);
connector.setOuterInterfaceRequiringRole(outerRole); connector.setInnerInterfaceRequiringRole(innerRole);
connector.setName(innerRole.getName() + " -> " + outerRole.getName()); connector.setOuterInterfaceRequiringRole(outerRole);
return connector; connector.setName(innerRole.getName() + " -> " + outerRole.getName());
return connector;
}
return null;
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment