/*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; // line 2 "Class_DistributableRMI.ump" public class ClientImpl implements java.io.Serializable , IClientImpl { //------------------------ // MEMBER VARIABLES //------------------------ //------------------------ // CONSTRUCTOR //------------------------ public ClientImpl() {} //------------------------ // Reference to the proxy //------------------------ Client self; public void setSelf(Client proxy) { self=proxy; } //------------------------ // Returning the Hashcode //------------------------ public int getHashCode() { return hashCode(); } //------------------------ // INTERFACE //------------------------ public void delete() {} } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceRMI1; import java.util.*; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; import java.rmi.RemoteException; public interface IVendorImpl extends java.rmi.Remote, IAgentImpl { public void setSelf(Vendor proxy) throws RemoteException; public int getHashCode() throws RemoteException; public Order getOrder(int index) throws RemoteException; public List<Order> getOrders() throws RemoteException; public int numberOfOrders() throws RemoteException; public boolean hasOrders() throws RemoteException; public int indexOfOrder(Order aOrder) throws RemoteException; public Customer getCustomer(int index) throws RemoteException; public List<Customer> getCustomers() throws RemoteException; public int numberOfCustomers() throws RemoteException; public boolean hasCustomers() throws RemoteException; public int indexOfCustomer(Customer aCustomer) throws RemoteException; public boolean addOrder(Order aOrder) throws RemoteException; public boolean removeOrder(Order aOrder) throws RemoteException; public boolean addOrderAt(Order aOrder, int index) throws RemoteException; public boolean addOrMoveOrderAt(Order aOrder, int index) throws RemoteException; public boolean addCustomer(Customer aCustomer) throws RemoteException; public boolean removeCustomer(Customer aCustomer) throws RemoteException; public boolean addCustomerAt(Customer aCustomer, int index) throws RemoteException; public boolean addOrMoveCustomerAt(Customer aCustomer, int index) throws RemoteException; public void delete() throws RemoteException; public Product findProduct(ProductType productType) throws RemoteException; public Order makeOrder(Customer aCustomer, Product aProduct) throws RemoteException; } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceRMI0; import java.util.*; import java.io.Serializable; // line 33 "../ecommerceRMI0.ump" public class Agent implements java.io.Serializable, IAgentImpl { //------------------------ // MEMBER VARIABLES //------------------------ //Agent Attributes private transient String name; //Agent Associations private transient List<Warehouse> warehouses; private transient SystemManager systemManager; //------------------------ // CONSTRUCTOR //------------------------ public Agent(String aName, UmpleRuntime.UmpleComponent umpleComponent) { if(umpleComponent.getNode().getId()!=UmpleRuntime.getThisNodeId()) { if(this.getClass()== Agent.class) UmpleRuntime.getInstance().newAgent(aName, umpleComponent, this); return; } else { UmpleRuntime.getInstance().newAgent(this); } name = aName; warehouses = new ArrayList<Warehouse>(); } //------------------------ // Returning the Hashcode //------------------------ public int getHashCodeImpl() { return hashCode(); } //------------------------ // INTERFACE //------------------------ public boolean setNameImpl(String aName) { boolean wasSet = false; name = aName; wasSet = true; return wasSet; } public String getNameImpl() { return name; } /* Code from template association_GetMany */ public Warehouse getWarehousImpl(int index) { Warehouse aWarehous = warehouses.get(index); return aWarehous; } public List<Warehouse> getWarehousesImpl() { List<Warehouse> newWarehouses = Collections.unmodifiableList(warehouses); return newWarehouses; } public int numberOfWarehousesImpl() { int number = warehouses.size(); return number; } public boolean hasWarehousesImpl() { boolean has = warehouses.size() > 0; return has; } public int indexOfWarehousImpl(Warehouse aWarehous) { int index = warehouses.indexOf(aWarehous); return index; } /* Code from template association_GetOne */ public SystemManager getSystemManagerImpl() { return systemManager; } public boolean hasSystemManagerImpl() { boolean has = systemManager != null; return has; } /* Code from template association_MinimumNumberOfMethod */ public static int minimumNumberOfWarehouses() { return 0; } /* Code from template association_AddManyToManyMethod */ public boolean addWarehousImpl(Warehouse aWarehous) { boolean wasAdded = false; if (warehouses.contains(aWarehous)) { return false; } warehouses.add(aWarehous); if (aWarehous.indexOfAgent(this) != -1) { wasAdded = true; } else { wasAdded = aWarehous.addAgent(this); if (!wasAdded) { warehouses.remove(aWarehous); } } return wasAdded; } /* Code from template association_RemoveMany */ public boolean removeWarehousImpl(Warehouse aWarehous) { boolean wasRemoved = false; if (!warehouses.contains(aWarehous)) { return wasRemoved; } int oldIndex = warehouses.indexOf(aWarehous); warehouses.remove(oldIndex); if (aWarehous.indexOfAgent(this) == -1) { wasRemoved = true; } else { wasRemoved = aWarehous.removeAgent(this); if (!wasRemoved) { warehouses.add(oldIndex,aWarehous); } } return wasRemoved; } /* Code from template association_AddIndexControlFunctions */ public boolean addWarehousAtImpl(Warehouse aWarehous, int index) { boolean wasAdded = false; if(addWarehous(aWarehous)) { if(index < 0 ) { index = 0; } if(index > numberOfWarehouses()) { index = numberOfWarehouses() - 1; } warehouses.remove(aWarehous); warehouses.add(index, aWarehous); wasAdded = true; } return wasAdded; } public boolean addOrMoveWarehousAtImpl(Warehouse aWarehous, int index) { boolean wasAdded = false; if(warehouses.contains(aWarehous)) { if(index < 0 ) { index = 0; } if(index > numberOfWarehouses()) { index = numberOfWarehouses() - 1; } warehouses.remove(aWarehous); warehouses.add(index, aWarehous); wasAdded = true; } else { wasAdded = addWarehousAt(aWarehous, index); } return wasAdded; } /* Code from template association_SetOptionalOneToMany */ public boolean setSystemManagerImpl(SystemManager aSystemManager) { boolean wasSet = false; SystemManager existingSystemManager = systemManager; systemManager = aSystemManager; if (existingSystemManager != null && !existingSystemManager.equals(aSystemManager)) { existingSystemManager.removeAgent(this); } if (aSystemManager != null) { aSystemManager.addAgent(this); } wasSet = true; return wasSet; } public void deleteImpl() { ArrayList<Warehouse> copyOfWarehouses = new ArrayList<Warehouse>(warehouses); warehouses.clear(); for(Warehouse aWarehous : copyOfWarehouses) { aWarehous.removeAgent(this); } if (systemManager != null) { SystemManager placeholderSystemManager = systemManager; this.systemManager = null; placeholderSystemManager.removeAgent(this); } } public String toString() { return super.toString() + "["+ "name" + ":" + getName()+ "]" + System.getProperties().getProperty("line.separator") + " " + "systemManager = "+(getSystemManager()!=null?Integer.toHexString(System.identityHashCode(getSystemManager())):"null"); } public void setRealObject(IAgentImpl aObject) { realObject=aObject; } transient IAgentImpl realObject=this; public Agent(String aName) { this(aName,UmpleRuntime.getComponent("Agent")); } public int getHashCode() { while(true) try{ return realObject.getHashCodeImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean setName(String aName) { while(true) try{ return realObject.setNameImpl(aName); } catch(Exception e) {System.err.println(e.toString());} } public String getName() { while(true) try{ return realObject.getNameImpl(); } catch(Exception e) {System.err.println(e.toString());} } public Warehouse getWarehous(int index) { while(true) try{ return realObject.getWarehousImpl(index); } catch(Exception e) {System.err.println(e.toString());} } public List<Warehouse> getWarehouses() { while(true) try{ return realObject.getWarehousesImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfWarehouses() { while(true) try{ return realObject.numberOfWarehousesImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasWarehouses() { while(true) try{ return realObject.hasWarehousesImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfWarehous(Warehouse aWarehous) { while(true) try{ return realObject.indexOfWarehousImpl(aWarehous); } catch(Exception e) {System.err.println(e.toString());} } public SystemManager getSystemManager() { while(true) try{ return realObject.getSystemManagerImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasSystemManager() { while(true) try{ return realObject.hasSystemManagerImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean addWarehous(Warehouse aWarehous) { while(true) try{ return realObject.addWarehousImpl(aWarehous); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeWarehous(Warehouse aWarehous) { while(true) try{ return realObject.removeWarehousImpl(aWarehous); } catch(Exception e) {System.err.println(e.toString());} } public boolean addWarehousAt(Warehouse aWarehous, int index) { while(true) try{ return realObject.addWarehousAtImpl(aWarehous,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveWarehousAt(Warehouse aWarehous, int index) { while(true) try{ return realObject.addOrMoveWarehousAtImpl(aWarehous,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean setSystemManager(SystemManager aSystemManager) { while(true) try{ return realObject.setSystemManagerImpl(aSystemManager); } catch(Exception e) {System.err.println(e.toString());} } public void delete() { while(true) try{ realObject.deleteImpl(); break; } catch(Exception e) {System.err.println(e.toString());} } protected IAgentImpl remoteObject; public void setRemoteObject(IAgentImpl aRemoteObject) { remoteObject=aRemoteObject; } public IAgentImpl getRemoteObject() { return (IAgentImpl)remoteObject; } private void readObject(java.io.ObjectInputStream in) throws Exception { try { in.defaultReadObject(); realObject=(IAgentImpl)remoteObject; } catch(Exception e) { throw e; } } public boolean equals(Object obj) { if(obj.getClass()!=this.getClass()) return false; return (getHashCode()==((Agent)obj).getHashCode()); } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceRMI0; import java.io.Serializable; // line 38 "../ecommerceRMI0.ump" public class Order implements java.io.Serializable { //------------------------ // MEMBER VARIABLES //------------------------ //Order Associations private Customer customer; private Vendor vendor; private Product product; private SystemManager systemManager; //------------------------ // CONSTRUCTOR //------------------------ public Order(Product aProduct) { if (!setProduct(aProduct)) { throw new RuntimeException("Unable to create Order due to aProduct. See https://manual.umple.org?RE002ViolationofAssociationMultiplicity.html"); } } //------------------------ // INTERFACE //------------------------ /* Code from template association_GetOne */ public Customer getCustomer() { return customer; } public boolean hasCustomer() { boolean has = customer != null; return has; } /* Code from template association_GetOne */ public Vendor getVendor() { return vendor; } public boolean hasVendor() { boolean has = vendor != null; return has; } /* Code from template association_GetOne */ public Product getProduct() { return product; } /* Code from template association_GetOne */ public SystemManager getSystemManager() { return systemManager; } public boolean hasSystemManager() { boolean has = systemManager != null; return has; } /* Code from template association_SetOptionalOneToMany */ public boolean setCustomer(Customer aCustomer) { boolean wasSet = false; Customer existingCustomer = customer; customer = aCustomer; if (existingCustomer != null && !existingCustomer.equals(aCustomer)) { existingCustomer.removeOrder(this); } if (aCustomer != null) { aCustomer.addOrder(this); } wasSet = true; return wasSet; } /* Code from template association_SetOptionalOneToMany */ public boolean setVendor(Vendor aVendor) { boolean wasSet = false; Vendor existingVendor = vendor; vendor = aVendor; if (existingVendor != null && !existingVendor.equals(aVendor)) { existingVendor.removeOrder(this); } if (aVendor != null) { aVendor.addOrder(this); } wasSet = true; return wasSet; } /* Code from template association_SetUnidirectionalOne */ public boolean setProduct(Product aNewProduct) { boolean wasSet = false; if (aNewProduct != null) { product = aNewProduct; wasSet = true; } return wasSet; } /* Code from template association_SetOptionalOneToMany */ public boolean setSystemManager(SystemManager aSystemManager) { boolean wasSet = false; SystemManager existingSystemManager = systemManager; systemManager = aSystemManager; if (existingSystemManager != null && !existingSystemManager.equals(aSystemManager)) { existingSystemManager.removeOrder(this); } if (aSystemManager != null) { aSystemManager.addOrder(this); } wasSet = true; return wasSet; } public void delete() { if (customer != null) { Customer placeholderCustomer = customer; this.customer = null; placeholderCustomer.removeOrder(this); } if (vendor != null) { Vendor placeholderVendor = vendor; this.vendor = null; placeholderVendor.removeOrder(this); } product = null; if (systemManager != null) { SystemManager placeholderSystemManager = systemManager; this.systemManager = null; placeholderSystemManager.removeOrder(this); } } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package distributed.rmi.withMethods; import java.util.*; import java.lang.Thread; import java.io.Serializable; import java.rmi.RemoteException; public interface IMicrowaveImpl extends java.rmi.Remote { public int getHashCodeImpl() throws RemoteException; public boolean setLightOnImpl(boolean aLightOn) throws RemoteException; public boolean setPowerTubeOnImpl(boolean aPowerTubeOn) throws RemoteException; public boolean setIsDoorOpenedImpl(boolean aIsDoorOpened) throws RemoteException; public boolean setIsButtonPressedImpl(boolean aIsButtonPressed) throws RemoteException; public boolean getLightOnImpl() throws RemoteException; public boolean getPowerTubeOnImpl() throws RemoteException; public boolean getIsDoorOpenedImpl() throws RemoteException; public boolean getIsButtonPressedImpl() throws RemoteException; public boolean _doorOpenedImpl() throws RemoteException; public boolean _buttonPressedImpl() throws RemoteException; public boolean _doorClosedImpl() throws RemoteException; public void deleteImpl() throws RemoteException; public void doorOpenedImpl() throws RemoteException; public void buttonPressedImpl() throws RemoteException; public void doorClosedImpl() throws RemoteException; public void runImpl() throws RemoteException; public void turnLightOnImpl(boolean on) throws RemoteException; public void energizePowerTubeImpl(boolean on) throws RemoteException; public void turnOffImpl() throws RemoteException; } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceRMI0; import java.util.*; import java.io.Serializable; import java.rmi.RemoteException; public interface IVendorImpl extends java.rmi.Remote, IAgentImpl { public int getHashCodeImpl() throws RemoteException; public Order getOrderImpl(int index) throws RemoteException; public List<Order> getOrdersImpl() throws RemoteException; public int numberOfOrdersImpl() throws RemoteException; public boolean hasOrdersImpl() throws RemoteException; public int indexOfOrderImpl(Order aOrder) throws RemoteException; public Customer getCustomerImpl(int index) throws RemoteException; public List<Customer> getCustomersImpl() throws RemoteException; public int numberOfCustomersImpl() throws RemoteException; public boolean hasCustomersImpl() throws RemoteException; public int indexOfCustomerImpl(Customer aCustomer) throws RemoteException; public boolean addOrderImpl(Order aOrder) throws RemoteException; public boolean removeOrderImpl(Order aOrder) throws RemoteException; public boolean addOrderAtImpl(Order aOrder, int index) throws RemoteException; public boolean addOrMoveOrderAtImpl(Order aOrder, int index) throws RemoteException; public boolean addCustomerImpl(Customer aCustomer) throws RemoteException; public boolean removeCustomerImpl(Customer aCustomer) throws RemoteException; public boolean addCustomerAtImpl(Customer aCustomer, int index) throws RemoteException; public boolean addOrMoveCustomerAtImpl(Customer aCustomer, int index) throws RemoteException; public void deleteImpl() throws RemoteException; public Product findProductImpl(ProductType productType) throws RemoteException; public Order makeOrderImpl(Customer aCustomer, Product aProduct) throws RemoteException; } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package distributed.rmi2; import java.io.Serializable; // line 3 "../../Class_DistributableRMI2.ump" public class ClientImpl extends CC implements java.io.Serializable , IClientImpl { //------------------------ // MEMBER VARIABLES //------------------------ //------------------------ // CONSTRUCTOR //------------------------ public ClientImpl() { super(); } //------------------------ // Reference to the proxy //------------------------ Client self; public void setSelf(Client proxy) { self=proxy; } //------------------------ // Returning the Hashcode //------------------------ public int getHashCode() { return hashCode(); } //------------------------ // INTERFACE //------------------------ public void delete() { super.delete(); } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceRMI1; import java.util.*; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; // line 34 "../ecommerceRMI1.ump" public class AgentImpl implements java.io.Serializable , IAgentImpl { //------------------------ // MEMBER VARIABLES //------------------------ //AgentImpl Attributes private String name; //AgentImpl Associations private List<Warehouse> warehouses; private SystemManager systemManager; //------------------------ // CONSTRUCTOR //------------------------ public AgentImpl(String aName) { name = aName; warehouses = new ArrayList<Warehouse>(); } //------------------------ // Reference to the proxy //------------------------ Agent self; public void setSelf(Agent proxy) { self=proxy; } //------------------------ // Returning the Hashcode //------------------------ public int getHashCode() { return hashCode(); } //------------------------ // INTERFACE //------------------------ public boolean setName(String aName) { boolean wasSet = false; name = aName; wasSet = true; return wasSet; } public String getName() { return name; } /* Code from template association_GetMany */ public Warehouse getWarehous(int index) { Warehouse aWarehous = warehouses.get(index); return aWarehous; } public List<Warehouse> getWarehouses() { List<Warehouse> newWarehouses = Collections.unmodifiableList(warehouses); return newWarehouses; } public int numberOfWarehouses() { int number = warehouses.size(); return number; } public boolean hasWarehouses() { boolean has = warehouses.size() > 0; return has; } public int indexOfWarehous(Warehouse aWarehous) { int index = warehouses.indexOf(aWarehous); return index; } /* Code from template association_GetOne */ public SystemManager getSystemManager() { return systemManager; } public boolean hasSystemManager() { boolean has = systemManager != null; return has; } /* Code from template association_MinimumNumberOfMethod */ public static int minimumNumberOfWarehouses() { return 0; } /* Code from template association_AddManyToManyMethod */ public boolean addWarehous(Warehouse aWarehous) { boolean wasAdded = false; if (warehouses.contains(aWarehous)) { return false; } warehouses.add(aWarehous); if (aWarehous.indexOfAgent(self) != -1) { wasAdded = true; } else { wasAdded = aWarehous.addAgent(self); if (!wasAdded) { warehouses.remove(aWarehous); } } return wasAdded; } /* Code from template association_RemoveMany */ public boolean removeWarehous(Warehouse aWarehous) { boolean wasRemoved = false; if (!warehouses.contains(aWarehous)) { return wasRemoved; } int oldIndex = warehouses.indexOf(aWarehous); warehouses.remove(oldIndex); if (aWarehous.indexOfAgent(self) == -1) { wasRemoved = true; } else { wasRemoved = aWarehous.removeAgent(self); if (!wasRemoved) { warehouses.add(oldIndex,aWarehous); } } return wasRemoved; } /* Code from template association_AddIndexControlFunctions */ public boolean addWarehousAt(Warehouse aWarehous, int index) { boolean wasAdded = false; if(addWarehous(aWarehous)) { if(index < 0 ) { index = 0; } if(index > numberOfWarehouses()) { index = numberOfWarehouses() - 1; } warehouses.remove(aWarehous); warehouses.add(index, aWarehous); wasAdded = true; } return wasAdded; } public boolean addOrMoveWarehousAt(Warehouse aWarehous, int index) { boolean wasAdded = false; if(warehouses.contains(aWarehous)) { if(index < 0 ) { index = 0; } if(index > numberOfWarehouses()) { index = numberOfWarehouses() - 1; } warehouses.remove(aWarehous); warehouses.add(index, aWarehous); wasAdded = true; } else { wasAdded = addWarehousAt(aWarehous, index); } return wasAdded; } /* Code from template association_SetOptionalOneToMany */ public boolean setSystemManager(SystemManager aSystemManager) { boolean wasSet = false; SystemManager existingSystemManager = systemManager; systemManager = aSystemManager; if (existingSystemManager != null && !existingSystemManager.equals(aSystemManager)) { existingSystemManager.removeAgent(self); } if (aSystemManager != null) { aSystemManager.addAgent(self); } wasSet = true; return wasSet; } public void delete() { ArrayList<Warehouse> copyOfWarehouses = new ArrayList<Warehouse>(warehouses); warehouses.clear(); for(Warehouse aWarehous : copyOfWarehouses) { aWarehous.removeAgent(self); } if (systemManager != null) { SystemManager placeholderSystemManager = systemManager; this.systemManager = null; placeholderSystemManager.removeAgent(self); } } public String toString() { return super.toString() + "["+ "name" + ":" + getName()+ "]" + System.getProperties().getProperty("line.separator") + " " + "systemManager = "+(getSystemManager()!=null?Integer.toHexString(System.identityHashCode(getSystemManager())):"null"); } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package distributed.rmi3; import java.io.Serializable; import java.rmi.registry.Registry; import java.rmi.registry.LocateRegistry; import java.rmi.server.UnicastRemoteObject; public class ClientRemote extends CCRemote implements IClientImpl { Client realObject; public void setRealObject(Client aObject) { realObject=aObject; } public ClientRemote() {} public ClientRemote(Client aObject) { super(aObject); realObject=aObject; } public int getHashCodeImpl() { while(true) try{ return realObject.getHashCodeImpl(); } catch(Exception e) {System.err.println(e.toString());} } public void deleteImpl() { while(true) try{ realObject.deleteImpl(); break; } catch(Exception e) {System.err.println(e.toString());} } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package distributed.rmi4; import java.io.Serializable; // line 3 "../../Class_DistributableRMI4.ump" public class CC extends Father { //------------------------ // MEMBER VARIABLES //------------------------ //------------------------ // CONSTRUCTOR //------------------------ public CC() { super(); } //------------------------ // INTERFACE //------------------------ public void delete() { super.delete(); } // line 7 "../../Class_DistributableRMI4.ump" public void someMethod1(){ } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceRMI0; import java.util.*; import java.io.Serializable; import java.rmi.RemoteException; public interface ISupplierImpl extends java.rmi.Remote, IAgentImpl { public int getHashCodeImpl() throws RemoteException; public Product getProductImpl(int index) throws RemoteException; public List<Product> getProductsImpl() throws RemoteException; public int numberOfProductsImpl() throws RemoteException; public boolean hasProductsImpl() throws RemoteException; public int indexOfProductImpl(Product aProduct) throws RemoteException; public boolean addProductImpl(Product aProduct) throws RemoteException; public boolean removeProductImpl(Product aProduct) throws RemoteException; public boolean addProductAtImpl(Product aProduct, int index) throws RemoteException; public boolean addOrMoveProductAtImpl(Product aProduct, int index) throws RemoteException; public void deleteImpl() throws RemoteException; public Product createProductImpl(String serialNumber, String productType) throws RemoteException; public void putInWarehouseImpl(Product aProduct, Warehouse warehouse) throws RemoteException; } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package distributed.rmi.withMethods; import java.util.*; import java.lang.Thread; import java.io.Serializable; // line 2 "../../../Class_DistributableRMI_WithMethods.ump" public class Microwave implements java.io.Serializable, IMicrowaveImpl, Runnable { //------------------------ // STATIC VARIABLES //------------------------ public static final int TimeIncrementMs = 1000; //------------------------ // MEMBER VARIABLES //------------------------ //Microwave Attributes private transient boolean lightOn; private transient boolean powerTubeOn; private transient boolean isDoorOpened; private transient boolean isButtonPressed; //Microwave State Machines public enum OperatingMicrowaveStateMachine { readyToCook, doorOpen, cooking, cookingInterrupted, cookingComplete, cookingExtended } private transient OperatingMicrowaveStateMachine operatingMicrowaveStateMachine; //enumeration type of messages accepted by Microwave protected enum MessageType { doorOpened_M, buttonPressed_M, doorClosed_M } MessageQueue queue; Thread removal; //------------------------ // CONSTRUCTOR //------------------------ public Microwave(UmpleRuntime.UmpleComponent umpleComponent) { if(umpleComponent.getNode().getId()!=UmpleRuntime.getThisNodeId()) { if(this.getClass()== Microwave.class) UmpleRuntime.getInstance().newMicrowave( umpleComponent, this); return; } else { UmpleRuntime.getInstance().newMicrowave(this); } lightOn = false; powerTubeOn = false; isDoorOpened = false; isButtonPressed = false; setOperatingMicrowaveStateMachine(OperatingMicrowaveStateMachine.readyToCook); queue = new MessageQueue(); removal=new Thread(this); //start the thread of Microwave removal.start(); } //------------------------ // Returning the Hashcode //------------------------ public int getHashCodeImpl() { return hashCode(); } //------------------------ // INTERFACE //------------------------ public boolean setLightOnImpl(boolean aLightOn) { boolean wasSet = false; lightOn = aLightOn; wasSet = true; return wasSet; } public boolean setPowerTubeOnImpl(boolean aPowerTubeOn) { boolean wasSet = false; powerTubeOn = aPowerTubeOn; wasSet = true; return wasSet; } public boolean setIsDoorOpenedImpl(boolean aIsDoorOpened) { boolean wasSet = false; isDoorOpened = aIsDoorOpened; wasSet = true; return wasSet; } public boolean setIsButtonPressedImpl(boolean aIsButtonPressed) { boolean wasSet = false; isButtonPressed = aIsButtonPressed; wasSet = true; return wasSet; } public boolean getLightOnImpl() { return lightOn; } public boolean getPowerTubeOnImpl() { return powerTubeOn; } public boolean getIsDoorOpenedImpl() { return isDoorOpened; } public boolean getIsButtonPressedImpl() { return isButtonPressed; } public String getOperatingMicrowaveStateMachineFullName() { String answer = operatingMicrowaveStateMachine.toString(); return answer; } public OperatingMicrowaveStateMachine getOperatingMicrowaveStateMachine() { return operatingMicrowaveStateMachine; } public boolean _doorOpenedImpl() { boolean wasEventProcessed = false; OperatingMicrowaveStateMachine aOperatingMicrowaveStateMachine = operatingMicrowaveStateMachine; switch (aOperatingMicrowaveStateMachine) { case readyToCook: // line 16 "../../../Class_DistributableRMI_WithMethods.ump" setIsDoorOpened(true); setOperatingMicrowaveStateMachine(OperatingMicrowaveStateMachine.doorOpen); wasEventProcessed = true; break; case cooking: // line 38 "../../../Class_DistributableRMI_WithMethods.ump" setIsDoorOpened(true); setOperatingMicrowaveStateMachine(OperatingMicrowaveStateMachine.cookingInterrupted); wasEventProcessed = true; break; case cookingComplete: // line 49 "../../../Class_DistributableRMI_WithMethods.ump" setIsDoorOpened(true); setOperatingMicrowaveStateMachine(OperatingMicrowaveStateMachine.doorOpen); wasEventProcessed = true; break; case cookingExtended: // line 58 "../../../Class_DistributableRMI_WithMethods.ump" setIsDoorOpened(true); setOperatingMicrowaveStateMachine(OperatingMicrowaveStateMachine.cookingInterrupted); wasEventProcessed = true; break; default: // Other states do respond to this event } return wasEventProcessed; } public boolean _buttonPressedImpl() { boolean wasEventProcessed = false; OperatingMicrowaveStateMachine aOperatingMicrowaveStateMachine = operatingMicrowaveStateMachine; switch (aOperatingMicrowaveStateMachine) { case readyToCook: // line 17 "../../../Class_DistributableRMI_WithMethods.ump" setIsButtonPressed(true); setOperatingMicrowaveStateMachine(OperatingMicrowaveStateMachine.cooking); wasEventProcessed = true; break; case cooking: // line 39 "../../../Class_DistributableRMI_WithMethods.ump" setIsButtonPressed(true); setOperatingMicrowaveStateMachine(OperatingMicrowaveStateMachine.cookingExtended); wasEventProcessed = true; break; case cookingComplete: // line 50 "../../../Class_DistributableRMI_WithMethods.ump" setIsButtonPressed(true); setOperatingMicrowaveStateMachine(OperatingMicrowaveStateMachine.cooking); wasEventProcessed = true; break; case cookingExtended: // line 59 "../../../Class_DistributableRMI_WithMethods.ump" setIsButtonPressed(true); setOperatingMicrowaveStateMachine(OperatingMicrowaveStateMachine.cookingExtended); wasEventProcessed = true; break; default: // Other states do respond to this event } return wasEventProcessed; } public boolean _doorClosedImpl() { boolean wasEventProcessed = false; OperatingMicrowaveStateMachine aOperatingMicrowaveStateMachine = operatingMicrowaveStateMachine; switch (aOperatingMicrowaveStateMachine) { case doorOpen: // line 25 "../../../Class_DistributableRMI_WithMethods.ump" setIsDoorOpened(false); setOperatingMicrowaveStateMachine(OperatingMicrowaveStateMachine.readyToCook); wasEventProcessed = true; break; case cookingInterrupted: // line 44 "../../../Class_DistributableRMI_WithMethods.ump" setIsDoorOpened(false); setOperatingMicrowaveStateMachine(OperatingMicrowaveStateMachine.readyToCook); wasEventProcessed = true; break; default: // Other states do respond to this event } return wasEventProcessed; } private void setOperatingMicrowaveStateMachine(OperatingMicrowaveStateMachine aOperatingMicrowaveStateMachine) { operatingMicrowaveStateMachine = aOperatingMicrowaveStateMachine; // entry actions and do activities switch(operatingMicrowaveStateMachine) { case readyToCook: // line 12 "../../../Class_DistributableRMI_WithMethods.ump" // turn off light turnOff(); break; case doorOpen: // line 21 "../../../Class_DistributableRMI_WithMethods.ump" // turn on light turnLightOn(true); break; case cooking: // line 29 "../../../Class_DistributableRMI_WithMethods.ump" // turn on light turnLightOn(true); // energize power tube energizePowerTube(true); //release a button setIsButtonPressed(false); break; case cookingInterrupted: // line 43 "../../../Class_DistributableRMI_WithMethods.ump" turnOff(); break; case cookingComplete: // line 48 "../../../Class_DistributableRMI_WithMethods.ump" turnOff(); break; case cookingExtended: // line 54 "../../../Class_DistributableRMI_WithMethods.ump" //release a button setIsButtonPressed(false); break; } } public void deleteImpl() { removal.interrupt(); } protected class Message { MessageType type; //Message parameters Vector<Object> param; public Message(MessageType t, Vector<Object> p) { type = t; param = p; } @Override public String toString() { return type + "," + param; } } protected class MessageQueue { Queue<Message> messages = new LinkedList<Message>(); public synchronized void put(Message m) { messages.add(m); notify(); } public synchronized Message getNext() { try { while (messages.isEmpty()) { wait(); } } catch (InterruptedException e) { Thread.currentThread().interrupt(); return null; } //The element to be removed Message m = messages.remove(); return (m); } } //------------------------------ //messages accepted //------------------------------ public void doorOpenedImpl() { queue.put(new Message(MessageType.doorOpened_M, null)); } public void buttonPressedImpl() { queue.put(new Message(MessageType.buttonPressed_M, null)); } public void doorClosedImpl() { queue.put(new Message(MessageType.doorClosed_M, null)); } @Override public void runImpl() { boolean status=false; while (true) { Message m = queue.getNext(); if(m == null) return; switch (m.type) { case doorOpened_M: status = _doorOpened(); break; case buttonPressed_M: status = _buttonPressed(); break; case doorClosed_M: status = _doorClosed(); break; default: } if(!status) { // Error message is written or exception is raised } } } /** * turn on light */ // line 66 "../../../Class_DistributableRMI_WithMethods.ump" public void turnLightOnImpl(boolean on){ System.out.println("turns the light "+ (on ? "on" : "off")); System.out.println("light " + (on ? "on" : "off")); setLightOn(on); } /** * energize/deenergize power tube */ // line 73 "../../../Class_DistributableRMI_WithMethods.ump" public void energizePowerTubeImpl(boolean on){ System.out.println("energizes/deenergize the power tube"); System.out.println("power tube " + (on ? "on" : "off")); setPowerTubeOn(on); } // line 79 "../../../Class_DistributableRMI_WithMethods.ump" public void turnOffImpl(){ // turn off light turnLightOn(false); //release button setIsButtonPressed(false); // de-energize power tube energizePowerTube(false); } // line 87 "../../../Class_DistributableRMI_WithMethods.ump" public static void someMethod(){ } public String toString() { return super.toString() + "["+ "lightOn" + ":" + getLightOn()+ "," + "powerTubeOn" + ":" + getPowerTubeOn()+ "," + "isDoorOpened" + ":" + getIsDoorOpened()+ "," + "isButtonPressed" + ":" + getIsButtonPressed()+ "]"; } public void setRealObject(IMicrowaveImpl aObject) { realObject=aObject; } transient IMicrowaveImpl realObject=this; public Microwave() { this(UmpleRuntime.getComponent("Microwave")); } public int getHashCode() { while(true) try{ return realObject.getHashCodeImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean setLightOn(boolean aLightOn) { while(true) try{ return realObject.setLightOnImpl(aLightOn); } catch(Exception e) {System.err.println(e.toString());} } public boolean setPowerTubeOn(boolean aPowerTubeOn) { while(true) try{ return realObject.setPowerTubeOnImpl(aPowerTubeOn); } catch(Exception e) {System.err.println(e.toString());} } public boolean setIsDoorOpened(boolean aIsDoorOpened) { while(true) try{ return realObject.setIsDoorOpenedImpl(aIsDoorOpened); } catch(Exception e) {System.err.println(e.toString());} } public boolean setIsButtonPressed(boolean aIsButtonPressed) { while(true) try{ return realObject.setIsButtonPressedImpl(aIsButtonPressed); } catch(Exception e) {System.err.println(e.toString());} } public boolean getLightOn() { while(true) try{ return realObject.getLightOnImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean getPowerTubeOn() { while(true) try{ return realObject.getPowerTubeOnImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean getIsDoorOpened() { while(true) try{ return realObject.getIsDoorOpenedImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean getIsButtonPressed() { while(true) try{ return realObject.getIsButtonPressedImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean _doorOpened() { while(true) try{ return realObject._doorOpenedImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean _buttonPressed() { while(true) try{ return realObject._buttonPressedImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean _doorClosed() { while(true) try{ return realObject._doorClosedImpl(); } catch(Exception e) {System.err.println(e.toString());} } public void delete() { while(true) try{ realObject.deleteImpl(); break; } catch(Exception e) {System.err.println(e.toString());} } public void doorOpened () { while(true) try{ realObject.doorOpenedImpl(); break; } catch(Exception e) {System.err.println(e.toString());} } public void buttonPressed () { while(true) try{ realObject.buttonPressedImpl(); break; } catch(Exception e) {System.err.println(e.toString());} } public void doorClosed () { while(true) try{ realObject.doorClosedImpl(); break; } catch(Exception e) {System.err.println(e.toString());} } public void run () { while(true) try{ realObject.runImpl(); break; } catch(Exception e) {System.err.println(e.toString());} } public void turnLightOn(boolean on) { while(true) try{ realObject.turnLightOnImpl(on); break; } catch(Exception e) {System.err.println(e.toString());} } public void energizePowerTube(boolean on) { while(true) try{ realObject.energizePowerTubeImpl(on); break; } catch(Exception e) {System.err.println(e.toString());} } public void turnOff() { while(true) try{ realObject.turnOffImpl(); break; } catch(Exception e) {System.err.println(e.toString());} } protected IMicrowaveImpl remoteObject; public void setRemoteObject(IMicrowaveImpl aRemoteObject) { remoteObject=aRemoteObject; } public IMicrowaveImpl getRemoteObject() { return (IMicrowaveImpl)remoteObject; } private void readObject(java.io.ObjectInputStream in) throws Exception { try { in.defaultReadObject(); realObject=(IMicrowaveImpl)remoteObject; } catch(Exception e) { throw e; } } public boolean equals(Object obj) { if(obj.getClass()!=this.getClass()) return false; return (getHashCode()==((Microwave)obj).getHashCode()); } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceWS; import ecommerceWS.Warehouse; import ecommerceWS.Customer; import java.net.URL; import ecommerceWS.SystemManager; import javax.xml.ws.Service; import ecommerceWS.Vendor; import java.util.regex.Matcher; import javax.jws.soap.SOAPBinding; import javax.xml.ws.Endpoint; import javax.xml.bind.annotation.*; import ecommerceWS.Agent; import javax.jws.WebService; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.Unmarshaller; import java.util.Properties; import java.io.*; import java.io.IOException; import java.io.FileInputStream; import java.io.InputStreamReader; import java.io.Serializable; import javax.xml.bind.annotation.XmlAccessType; import ecommerceWS.Supplier; import javax.jws.WebMethod; import java.util.*; import javax.jws.soap.SOAPBinding.Style; import javax.xml.namespace.QName; import java.io.BufferedReader; import java.io.FileReader; import java.util.regex.Pattern; import java.io.InputStream; @WebService(endpointInterface = "ecommerceWS.IUmpleRuntime") public class UmpleRuntime implements IUmpleRuntime { private static Boolean isAlive = true; static int thisNodeId=-1; private int numberOfNodes=0; private static String fileAddress=""; static HashMap<Integer, UmpleNode> nodes=new HashMap<Integer, UmpleNode>(); static HashMap <String, UmpleComponent> components= new HashMap<String, UmpleComponent>(); public static void setFileAddress(String address) { fileAddress=address; } public static int getThisNodeId() { return thisNodeId; } private static void setThisNodeId(int id) { thisNodeId=id; } private static void readPropertiesFile() { String location="configuration.txt"; Properties prop = new Properties(); InputStream input = null; try { input = new FileInputStream("node.properties"); prop.load(input); if(getThisNodeId()<0) setThisNodeId(Integer.parseInt(prop.getProperty("name"))); location=prop.getProperty("location"); setFileAddress(location); } catch (IOException e) { e.printStackTrace(); if(getThisNodeId()<0) setThisNodeId(0); setFileAddress(location); } finally { if (input != null) { try { input.close(); } catch (IOException e) { e.printStackTrace(); } } } } public static UmpleComponent getComponent(String runtimeComponentName) { getInstance(); UmpleComponent aComponent=components.get(runtimeComponentName.toLowerCase()); if (aComponent!=null) return aComponent; else return components.get("local"); } public static void stopAll() { UmpleRuntime.getInstance().stopAllNodes(); } public void stopAllNodes() { for(int node=0;node<numberOfNodes;node=node+1) { if(node!=getThisNodeId()) { try { remoteFactories.get(node).stopNode(); } catch(Exception e) {System.err.println(e.toString());} } } stopNode(); } // ******************************** Factory public static UmpleRuntime theInstance = null; List<IUmpleRuntime> remoteFactories; public List<Object> listOfObjects; public List<Endpoint> listOfEndpoints; private Endpoint thisEndpoint; public static UmpleRuntime getInstance() { if(theInstance==null){ theInstance = new UmpleRuntime(); } return theInstance; } private UmpleRuntime() { listOfEndpoints=new ArrayList<Endpoint>(); listOfObjects=new ArrayList<Object>(); remoteFactories= new ArrayList<IUmpleRuntime>(); initialize(); } public int getNodeId(int umpleNodeId) { int nodeId=umpleNodeId; if(nodeId>=numberOfNodes) nodeId=numberOfNodes-1; return nodeId; } public int getNodeId(UmpleComponent umpleComponent) { return umpleComponent.getNode().getId(); } private void readConfigFile() { String input="{id=0; port=1099; https://localhost {component1}}{id=1; port=1700; https://localhost {component2}}"; try (BufferedReader br = new BufferedReader(new FileReader(fileAddress))) { input=""; String line; while ((line = br.readLine()) != null) { // Merging the lines input+=line+";"; } } catch (IOException e) { e.printStackTrace(); } finally { if (input != null) { int startIndex=input.indexOf("{"); if(startIndex>=0) //while(startIndex>=0) { Pattern pattern1 = Pattern.compile("([\\{|\\(])([^\\}\\)]+)([\\{|\\(])"); Pattern pattern2 = Pattern.compile("([\\}|\\)])([^\\{\\(]+)([\\}|\\)])"); Pattern pattern3 = Pattern.compile("([\\{|\\(])([^\\{\\(\\}\\)]+)([\\}|\\)])"); Pattern patternURL = Pattern.compile("(url)(\\s*[=|:]\\s*)([^;\\s]*)(,|;|\\r\\n|\\t)"); Pattern patternName = Pattern.compile("(id)(\\s*[=|:]\\s*)([^;\\s]*)(,|;|\\r\\n|\\t)"); Pattern patternPort = Pattern.compile("(port)(\\s*[=|:]\\s*)([^;\\s]*)(,|;|\\r\\n|\\t)"); Pattern patternIp = Pattern.compile("(ip)(\\s*[=|:]\\s*)([^;\\s]*)(,|;|\\r\\n|\\t)"); Pattern patternComponent = Pattern.compile("(\\s*)([^;,\\s]*)(\\s*)([,|;|\\r\\n|\\t])"); Matcher matcher1 = pattern1.matcher(input); Matcher matcher2 = pattern2.matcher(input); Matcher matcher3 = pattern3.matcher(input); String url=""; String ip=""; String name=""; int port=1111; String part1=""; String part2=""; String part3=""; String runtimeComponents=""; String machine=""; Boolean condition1=matcher1.find(); Boolean condition2=matcher2.find(); Boolean condition3=matcher3.find(); while (condition1||condition2||condition3) { url="https://localhost"; ip="localhost"; name=""; port=1111; part1=""; part2=""; part3=""; runtimeComponents=""; machine=""; if(condition1) part1=matcher1.group(2); if(condition2) part2=matcher2.group(2); if(condition3) part3=matcher3.group(2); if(condition1&&matcher3.end()>matcher1.end()) { machine=part1.toLowerCase()+part2.toLowerCase(); runtimeComponents=part3.toLowerCase()+";"; condition1=matcher1.find(); condition2=matcher2.find(); condition3=matcher3.find(); }else { machine=part3.toLowerCase(); condition3=matcher3.find(); } Matcher matcherURL = patternURL.matcher(machine); if(matcherURL.find()) url=matcherURL.group(3); Matcher matcherName = patternName.matcher(machine); if(matcherName.find()) name=matcherName.group(3); Matcher matcherIp = patternIp.matcher(machine); if(matcherIp.find()) ip=matcherIp.group(3); Matcher matcherPort = patternPort.matcher(machine); if(matcherPort.find()) port=Integer.parseInt(matcherPort.group(3)); UmpleNode aNode= new UmpleNode(Integer.parseInt(name)); Matcher matcherComponent = patternComponent.matcher(runtimeComponents); while(matcherComponent.find()) { String component=matcherComponent.group(2); UmpleComponent aComponent=new UmpleComponent(component,aNode); components.put(component,aComponent); } if(aNode.getId()==getThisNodeId()) { UmpleComponent aComponent=new UmpleComponent("local",aNode); components.put("local",aComponent); } aNode.setPort(port); aNode.setUrl(url); aNode.setIp(ip); nodes.put(aNode.getId(),aNode); } } } } } public void initialize() { if(fileAddress.equals("")) readPropertiesFile(); readConfigFile(); numberOfNodes= nodes.size(); thisEndpoint=Endpoint.create(this); thisEndpoint.publish(nodes.get(getThisNodeId()).getUrl()+":"+String.valueOf(nodes.get(getThisNodeId()).getPort())+"/UmpleRuntime"); for(int node=0;node<numberOfNodes;node=node+1) { if(node==getThisNodeId()) { remoteFactories.add(this); } else { System.out.println("connecting to node: "+node); while(true) { try { URL url = new URL(nodes.get(node).getUrl()+":"+String.valueOf(nodes.get(node).getPort())+"/UmpleRuntime?wsdl"); QName qname = new QName("https://ecommerceWS/", "UmpleRuntimeService"); Service service = Service.create(url, qname); IUmpleRuntime proxy = service.getPort(IUmpleRuntime.class); remoteFactories.add(proxy); break; } catch (Exception e) { System.err.println("Client exception: " + e.toString()); e.printStackTrace(); try { Thread.sleep(5000); } catch (InterruptedException interruptedException) {}; } } } } } public void stopNode() { System.out.println("stopping node"); for(Endpoint e: listOfEndpoints) { e.stop(); } thisEndpoint.stop(); isAlive=false; } public void newWarehouse(String aName, UmpleRuntime.UmpleComponent component,Warehouse object) { while(true){ try { Warehouse proxyObject = remoteFactories.get(getNodeId(component)).createWarehouse(aName); object.remoteUrl=proxyObject.remoteUrl; object.remotePort=proxyObject.remotePort; object.objectId=proxyObject.objectId; object.setRealObject(proxyObject.realObject); break; } catch(Exception e) { e.printStackTrace(); try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } } } public void newWarehouse(Warehouse object){ listOfObjects.add(object); object.remoteUrl=nodes.get(getThisNodeId()).getUrl(); object.remotePort=String.valueOf(nodes.get(getThisNodeId()).getPort()); object.objectId=object.getClass().getName()+String.valueOf(object.getHashCodeImpl()); object.setRealObject(object); Endpoint e=Endpoint.create(object); e.publish(object.remoteUrl+":"+object.remotePort+"/"+object.getClass().getSimpleName()+object.objectId); listOfEndpoints.add(e); } @WebMethod synchronized public Warehouse createWarehouse(String aName) { Warehouse object= new Warehouse(aName, UmpleRuntime.getComponent("local")); return object; } public void newAgent(String aName, UmpleRuntime.UmpleComponent component,Agent object) { while(true){ try { Agent proxyObject = remoteFactories.get(getNodeId(component)).createAgent(aName); object.remoteUrl=proxyObject.remoteUrl; object.remotePort=proxyObject.remotePort; object.objectId=proxyObject.objectId; object.setRealObject(proxyObject.realObject); break; } catch(Exception e) { e.printStackTrace(); try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } } } public void newAgent(Agent object){ listOfObjects.add(object); object.remoteUrl=nodes.get(getThisNodeId()).getUrl(); object.remotePort=String.valueOf(nodes.get(getThisNodeId()).getPort()); object.objectId=object.getClass().getName()+String.valueOf(object.getHashCodeImpl()); object.setRealObject(object); Endpoint e=Endpoint.create(object); e.publish(object.remoteUrl+":"+object.remotePort+"/"+object.getClass().getSimpleName()+object.objectId); listOfEndpoints.add(e); } @WebMethod synchronized public Agent createAgent(String aName) { Agent object= new Agent(aName, UmpleRuntime.getComponent("local")); return object; } public void newSupplier(String aName, UmpleRuntime.UmpleComponent component,Supplier object) { while(true){ try { Supplier proxyObject = remoteFactories.get(getNodeId(component)).createSupplier(aName); object.remoteUrl=proxyObject.remoteUrl; object.remotePort=proxyObject.remotePort; object.objectId=proxyObject.objectId; object.setRealObject(proxyObject.realObject); break; } catch(Exception e) { e.printStackTrace(); try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } } } public void newSupplier(Supplier object){ listOfObjects.add(object); object.remoteUrl=nodes.get(getThisNodeId()).getUrl(); object.remotePort=String.valueOf(nodes.get(getThisNodeId()).getPort()); object.objectId=object.getClass().getName()+String.valueOf(object.getHashCodeImpl()); object.setRealObject(object); Endpoint e=Endpoint.create(object); e.publish(object.remoteUrl+":"+object.remotePort+"/"+object.getClass().getSimpleName()+object.objectId); listOfEndpoints.add(e); } @WebMethod synchronized public Supplier createSupplier(String aName) { Supplier object= new Supplier(aName, UmpleRuntime.getComponent("local")); return object; } public void newVendor(String aName, UmpleRuntime.UmpleComponent component,Vendor object) { while(true){ try { Vendor proxyObject = remoteFactories.get(getNodeId(component)).createVendor(aName); object.remoteUrl=proxyObject.remoteUrl; object.remotePort=proxyObject.remotePort; object.objectId=proxyObject.objectId; object.setRealObject(proxyObject.realObject); break; } catch(Exception e) { e.printStackTrace(); try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } } } public void newVendor(Vendor object){ listOfObjects.add(object); object.remoteUrl=nodes.get(getThisNodeId()).getUrl(); object.remotePort=String.valueOf(nodes.get(getThisNodeId()).getPort()); object.objectId=object.getClass().getName()+String.valueOf(object.getHashCodeImpl()); object.setRealObject(object); Endpoint e=Endpoint.create(object); e.publish(object.remoteUrl+":"+object.remotePort+"/"+object.getClass().getSimpleName()+object.objectId); listOfEndpoints.add(e); } @WebMethod synchronized public Vendor createVendor(String aName) { Vendor object= new Vendor(aName, UmpleRuntime.getComponent("local")); return object; } public void newCustomer(String aName, UmpleRuntime.UmpleComponent component,Customer object) { while(true){ try { Customer proxyObject = remoteFactories.get(getNodeId(component)).createCustomer(aName); object.remoteUrl=proxyObject.remoteUrl; object.remotePort=proxyObject.remotePort; object.objectId=proxyObject.objectId; object.setRealObject(proxyObject.realObject); break; } catch(Exception e) { e.printStackTrace(); try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } } } public void newCustomer(Customer object){ listOfObjects.add(object); object.remoteUrl=nodes.get(getThisNodeId()).getUrl(); object.remotePort=String.valueOf(nodes.get(getThisNodeId()).getPort()); object.objectId=object.getClass().getName()+String.valueOf(object.getHashCodeImpl()); object.setRealObject(object); Endpoint e=Endpoint.create(object); e.publish(object.remoteUrl+":"+object.remotePort+"/"+object.getClass().getSimpleName()+object.objectId); listOfEndpoints.add(e); } @WebMethod synchronized public Customer createCustomer(String aName) { Customer object= new Customer(aName, UmpleRuntime.getComponent("local")); return object; } public void newSystemManager(UmpleRuntime.UmpleComponent component,SystemManager object) { while(true){ try { SystemManager proxyObject = remoteFactories.get(getNodeId(component)).createSystemManager(); object.remoteUrl=proxyObject.remoteUrl; object.remotePort=proxyObject.remotePort; object.objectId=proxyObject.objectId; object.setRealObject(proxyObject.realObject); break; } catch(Exception e) { e.printStackTrace(); try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } } } public void newSystemManager(SystemManager object){ listOfObjects.add(object); object.remoteUrl=nodes.get(getThisNodeId()).getUrl(); object.remotePort=String.valueOf(nodes.get(getThisNodeId()).getPort()); object.objectId=object.getClass().getName()+String.valueOf(object.getHashCodeImpl()); object.setRealObject(object); Endpoint e=Endpoint.create(object); e.publish(object.remoteUrl+":"+object.remotePort+"/"+object.getClass().getSimpleName()+object.objectId); listOfEndpoints.add(e); } @WebMethod synchronized public SystemManager createSystemManager() { SystemManager object= SystemManager.getInstance(UmpleRuntime.getComponent("local")); return object; } public static void main (String [] args) { if (args.length>0){ setThisNodeId(Integer.parseInt(args[0])); if (args.length>1) UmpleRuntime.setFileAddress(args[1]); } UmpleRuntime.getInstance(); while(isAlive){ try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } } public class UmpleNode { //------------------------ // MEMBER VARIABLES //------------------------ private int id; private String ip="localhost"; private String url="https://localhost"; private int port=1098; //------------------------ // CONSTRUCTOR //------------------------ public UmpleNode(int aId) { id= aId; } //------------------------ // INTERFACE //------------------------ public boolean setId(int aId) { boolean wasSet = false; id = aId; wasSet = true; return wasSet; } public boolean setIp(String aIp) { boolean wasSet = false; ip = aIp; wasSet = true; return wasSet; } public boolean setUrl(String aUrl) { boolean wasSet = false; url = aUrl; wasSet = true; return wasSet; } public boolean setPort(int aPort) { boolean wasSet = false; port = aPort; wasSet = true; return wasSet; } public int getId() { return id; } public String getIp() { return ip; } public String getUrl() { return url; } public int getPort() { return port; } public String toString() { return super.toString() + "["+"id" + ":" + getId()+ "]"; } } public class UmpleComponent { //------------------------ // MEMBER VARIABLES //------------------------ //UmpleComponent Attributes private int number=0; private String name; private UmpleNode node; //------------------------ // CONSTRUCTOR //------------------------ public UmpleComponent(String aName,UmpleNode aNode) { name=aName; node=aNode; } //------------------------ // INTERFACE //------------------------ public boolean setNumber(int aNumber) { boolean wasSet = false; number = aNumber; wasSet = true; return wasSet; } public boolean setName(String aName) { boolean wasSet = false; name = aName; wasSet = true; return wasSet; } public boolean setNode(UmpleNode aNode) { boolean wasSet = false; node = aNode; wasSet = true; return wasSet; } public UmpleNode getNode() { return node; } public int getNumber() { return number; } public String getName() { return name; } public boolean equals(Object object) { if(object instanceof UmpleComponent && ((UmpleComponent)object).getName() == this.name) { return true; } else { return false; } } } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package distributed.rmi.withMethods2; import java.util.*; import java.lang.Thread; // line 3 "../../../Class_DistributableRMI_WithMethods2.ump" public class MicrowaveImpl extends CCImpl implements java.io.Serializable , IMicrowaveImpl, Runnable { //------------------------ // STATIC VARIABLES //------------------------ public static final int TimeIncrementMs = 1000; //------------------------ // MEMBER VARIABLES //------------------------ //MicrowaveImpl Attributes private boolean lightOn; private boolean powerTubeOn; private boolean isDoorOpened; private boolean isButtonPressed; //MicrowaveImpl State Machines public enum OperatingMicrowaveStateMachine { readyToCook, doorOpen, cooking, cookingInterrupted, cookingComplete, cookingExtended } private OperatingMicrowaveStateMachine operatingMicrowaveStateMachine; //enumeration type of messages accepted by MicrowaveImpl protected enum MessageType { doorOpened_M, buttonPressed_M, doorClosed_M } MessageQueue queue; Thread removal; //------------------------ // CONSTRUCTOR //------------------------ public MicrowaveImpl() { super(); lightOn = false; powerTubeOn = false; isDoorOpened = false; isButtonPressed = false; setOperatingMicrowaveStateMachine(OperatingMicrowaveStateMachine.readyToCook); queue = new MessageQueue(); removal=new Thread(this); //start the thread of MicrowaveImpl removal.start(); } //------------------------ // Reference to the proxy //------------------------ Microwave self; public void setSelf(Microwave proxy) { super.setSelf(proxy); self=proxy; } //------------------------ // Returning the Hashcode //------------------------ public int getHashCode() { return hashCode(); } //------------------------ // INTERFACE //------------------------ public boolean setLightOn(boolean aLightOn) { boolean wasSet = false; lightOn = aLightOn; wasSet = true; return wasSet; } public boolean setPowerTubeOn(boolean aPowerTubeOn) { boolean wasSet = false; powerTubeOn = aPowerTubeOn; wasSet = true; return wasSet; } public boolean setIsDoorOpened(boolean aIsDoorOpened) { boolean wasSet = false; isDoorOpened = aIsDoorOpened; wasSet = true; return wasSet; } public boolean setIsButtonPressed(boolean aIsButtonPressed) { boolean wasSet = false; isButtonPressed = aIsButtonPressed; wasSet = true; return wasSet; } public boolean getLightOn() { return lightOn; } public boolean getPowerTubeOn() { return powerTubeOn; } public boolean getIsDoorOpened() { return isDoorOpened; } public boolean getIsButtonPressed() { return isButtonPressed; } public String getOperatingMicrowaveStateMachineFullName() { String answer = operatingMicrowaveStateMachine.toString(); return answer; } public OperatingMicrowaveStateMachine getOperatingMicrowaveStateMachine() { return operatingMicrowaveStateMachine; } public boolean _doorOpened() { boolean wasEventProcessed = false; OperatingMicrowaveStateMachine aOperatingMicrowaveStateMachine = operatingMicrowaveStateMachine; switch (aOperatingMicrowaveStateMachine) { case readyToCook: // line 16 "../../../Class_DistributableRMI_WithMethods2.ump" setIsDoorOpened(true); setOperatingMicrowaveStateMachine(OperatingMicrowaveStateMachine.doorOpen); wasEventProcessed = true; break; case cooking: // line 38 "../../../Class_DistributableRMI_WithMethods2.ump" setIsDoorOpened(true); setOperatingMicrowaveStateMachine(OperatingMicrowaveStateMachine.cookingInterrupted); wasEventProcessed = true; break; case cookingComplete: // line 49 "../../../Class_DistributableRMI_WithMethods2.ump" setIsDoorOpened(true); setOperatingMicrowaveStateMachine(OperatingMicrowaveStateMachine.doorOpen); wasEventProcessed = true; break; case cookingExtended: // line 58 "../../../Class_DistributableRMI_WithMethods2.ump" setIsDoorOpened(true); setOperatingMicrowaveStateMachine(OperatingMicrowaveStateMachine.cookingInterrupted); wasEventProcessed = true; break; default: // Other states do respond to this event } return wasEventProcessed; } public boolean _buttonPressed() { boolean wasEventProcessed = false; OperatingMicrowaveStateMachine aOperatingMicrowaveStateMachine = operatingMicrowaveStateMachine; switch (aOperatingMicrowaveStateMachine) { case readyToCook: // line 17 "../../../Class_DistributableRMI_WithMethods2.ump" setIsButtonPressed(true); setOperatingMicrowaveStateMachine(OperatingMicrowaveStateMachine.cooking); wasEventProcessed = true; break; case cooking: // line 39 "../../../Class_DistributableRMI_WithMethods2.ump" setIsButtonPressed(true); setOperatingMicrowaveStateMachine(OperatingMicrowaveStateMachine.cookingExtended); wasEventProcessed = true; break; case cookingComplete: // line 50 "../../../Class_DistributableRMI_WithMethods2.ump" setIsButtonPressed(true); setOperatingMicrowaveStateMachine(OperatingMicrowaveStateMachine.cooking); wasEventProcessed = true; break; case cookingExtended: // line 59 "../../../Class_DistributableRMI_WithMethods2.ump" setIsButtonPressed(true); setOperatingMicrowaveStateMachine(OperatingMicrowaveStateMachine.cookingExtended); wasEventProcessed = true; break; default: // Other states do respond to this event } return wasEventProcessed; } public boolean _doorClosed() { boolean wasEventProcessed = false; OperatingMicrowaveStateMachine aOperatingMicrowaveStateMachine = operatingMicrowaveStateMachine; switch (aOperatingMicrowaveStateMachine) { case doorOpen: // line 25 "../../../Class_DistributableRMI_WithMethods2.ump" setIsDoorOpened(false); setOperatingMicrowaveStateMachine(OperatingMicrowaveStateMachine.readyToCook); wasEventProcessed = true; break; case cookingInterrupted: // line 44 "../../../Class_DistributableRMI_WithMethods2.ump" setIsDoorOpened(false); setOperatingMicrowaveStateMachine(OperatingMicrowaveStateMachine.readyToCook); wasEventProcessed = true; break; default: // Other states do respond to this event } return wasEventProcessed; } private void setOperatingMicrowaveStateMachine(OperatingMicrowaveStateMachine aOperatingMicrowaveStateMachine) { operatingMicrowaveStateMachine = aOperatingMicrowaveStateMachine; // entry actions and do activities switch(operatingMicrowaveStateMachine) { case readyToCook: // line 12 "../../../Class_DistributableRMI_WithMethods2.ump" // turn off light turnOff(); break; case doorOpen: // line 21 "../../../Class_DistributableRMI_WithMethods2.ump" // turn on light turnLightOn(true); break; case cooking: // line 29 "../../../Class_DistributableRMI_WithMethods2.ump" // turn on light turnLightOn(true); // energize power tube energizePowerTube(true); //release a button setIsButtonPressed(false); break; case cookingInterrupted: // line 43 "../../../Class_DistributableRMI_WithMethods2.ump" turnOff(); break; case cookingComplete: // line 48 "../../../Class_DistributableRMI_WithMethods2.ump" turnOff(); break; case cookingExtended: // line 54 "../../../Class_DistributableRMI_WithMethods2.ump" //release a button setIsButtonPressed(false); break; } } public void delete() { removal.interrupt(); super.delete(); } protected class Message { MessageType type; //Message parameters Vector<Object> param; public Message(MessageType t, Vector<Object> p) { type = t; param = p; } @Override public String toString() { return type + "," + param; } } protected class MessageQueue { Queue<Message> messages = new LinkedList<Message>(); public synchronized void put(Message m) { messages.add(m); notify(); } public synchronized Message getNext() { try { while (messages.isEmpty()) { wait(); } } catch (InterruptedException e) { Thread.currentThread().interrupt(); return null; } //The element to be removed Message m = messages.remove(); return (m); } } //------------------------------ //messages accepted //------------------------------ public void doorOpened () { queue.put(new Message(MessageType.doorOpened_M, null)); } public void buttonPressed () { queue.put(new Message(MessageType.buttonPressed_M, null)); } public void doorClosed () { queue.put(new Message(MessageType.doorClosed_M, null)); } @Override public void run () { boolean status=false; while (true) { Message m = queue.getNext(); if(m == null) return; switch (m.type) { case doorOpened_M: status = _doorOpened(); break; case buttonPressed_M: status = _buttonPressed(); break; case doorClosed_M: status = _doorClosed(); break; default: } if(!status) { // Error message is written or exception is raised } } } /** * turn on light */ // line 66 "../../../Class_DistributableRMI_WithMethods2.ump" public void turnLightOn(boolean on){ System.out.println("turns the light "+ (on ? "on" : "off")); System.out.println("light " + (on ? "on" : "off")); setLightOn(on); } // line 72 "../../../Class_DistributableRMI_WithMethods2.ump" public static void someMethod(){ } public String toString() { return super.toString() + "["+ "lightOn" + ":" + getLightOn()+ "," + "powerTubeOn" + ":" + getPowerTubeOn()+ "," + "isDoorOpened" + ":" + getIsDoorOpened()+ "," + "isButtonPressed" + ":" + getIsButtonPressed()+ "]"; } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package distributed.rmi3; import java.io.Serializable; // line 5 "../../Class_DistributableRMI3.ump" public class Client extends CC implements ClientI ,java.io.Serializable, IClientImpl { //------------------------ // MEMBER VARIABLES //------------------------ //------------------------ // CONSTRUCTOR //------------------------ public Client(UmpleRuntime.UmpleComponent umpleComponent) { super(); if(umpleComponent.getNode().getId()!=UmpleRuntime.getThisNodeId()) { if(this.getClass()== Client.class) UmpleRuntime.getInstance().newClient( umpleComponent, this); return; } else { UmpleRuntime.getInstance().newClient(this); } } //------------------------ // Returning the Hashcode //------------------------ public int getHashCodeImpl() { return hashCode(); } //------------------------ // INTERFACE //------------------------ public void deleteImpl() { super.delete(); } public void setRealObject(IClientImpl aObject) { super.setRealObject(aObject); realObject=aObject; } transient IClientImpl realObject=this; public Client() { this(UmpleRuntime.getComponent("Client")); } public int getHashCode() { while(true) try{ return realObject.getHashCodeImpl(); } catch(Exception e) {System.err.println(e.toString());} } public void delete() { while(true) try{ realObject.deleteImpl(); break; } catch(Exception e) {System.err.println(e.toString());} } protected IClientImpl remoteObject; public void setRemoteObject(IClientImpl aRemoteObject) { remoteObject=aRemoteObject; } public IClientImpl getRemoteObject() { return (IClientImpl)remoteObject; } private void readObject(java.io.ObjectInputStream in) throws Exception { try { in.defaultReadObject(); realObject=(IClientImpl)remoteObject; } catch(Exception e) { throw e; } } public boolean equals(Object obj) { if(obj.getClass()!=this.getClass()) return false; return (getHashCode()==((Client)obj).getHashCode()); } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package distributed.rmi4; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; import java.io.Serializable; // line 13 "../../Class_DistributableRMI4.ump" public class MicrowaveImpl extends CC implements java.io.Serializable , IMicrowaveImpl { //------------------------ // MEMBER VARIABLES //------------------------ //------------------------ // CONSTRUCTOR //------------------------ public MicrowaveImpl() { super(); } //------------------------ // Reference to the proxy //------------------------ Microwave self; public void setSelf(Microwave proxy) { self=proxy; } //------------------------ // Returning the Hashcode //------------------------ public int getHashCode() { return hashCode(); } //------------------------ // INTERFACE //------------------------ public void delete() { super.delete(); } // line 18 "../../Class_DistributableRMI4.ump" public int method1(int f){ return f*2; } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package distributed.rmi5; import java.util.*; import java.io.Serializable; // line 39 "../../Class_DistributableRMI5.ump" public class Microwave implements java.io.Serializable, IMicrowaveImpl { //------------------------ // MEMBER VARIABLES //------------------------ //Microwave Attributes private transient int x; private transient String f; //Microwave Associations private transient List<Client> clients; //------------------------ // CONSTRUCTOR //------------------------ public Microwave(int aX, String aF, UmpleRuntime.UmpleComponent umpleComponent) { if(umpleComponent.getNode().getId()!=UmpleRuntime.getThisNodeId()) { if(this.getClass()== Microwave.class) UmpleRuntime.getInstance().newMicrowave(aX, aF, umpleComponent, this); return; } else { UmpleRuntime.getInstance().newMicrowave(this); } x = aX; f = aF; clients = new ArrayList<Client>(); } //------------------------ // Returning the Hashcode //------------------------ public int getHashCodeImpl() { return hashCode(); } //------------------------ // INTERFACE //------------------------ public boolean setXImpl(int aX) { boolean wasSet = false; x = aX; wasSet = true; return wasSet; } public boolean setFImpl(String aF) { boolean wasSet = false; f = aF; wasSet = true; return wasSet; } public int getXImpl() { return x; } public String getFImpl() { return f; } /* Code from template association_GetMany */ public Client getClientImpl(int index) { Client aClient = clients.get(index); return aClient; } /** * key{x,f} */ public List<Client> getClientsImpl() { List<Client> newClients = Collections.unmodifiableList(clients); return newClients; } public int numberOfClientsImpl() { int number = clients.size(); return number; } public boolean hasClientsImpl() { boolean has = clients.size() > 0; return has; } public int indexOfClientImpl(Client aClient) { int index = clients.indexOf(aClient); return index; } /* Code from template association_MinimumNumberOfMethod */ public static int minimumNumberOfClients() { return 0; } /* Code from template association_AddManyToManyMethod */ public boolean addClientImpl(Client aClient) { boolean wasAdded = false; if (clients.contains(aClient)) { return false; } clients.add(aClient); if (aClient.indexOfMicrowave(this) != -1) { wasAdded = true; } else { wasAdded = aClient.addMicrowave(this); if (!wasAdded) { clients.remove(aClient); } } return wasAdded; } /* Code from template association_RemoveMany */ public boolean removeClientImpl(Client aClient) { boolean wasRemoved = false; if (!clients.contains(aClient)) { return wasRemoved; } int oldIndex = clients.indexOf(aClient); clients.remove(oldIndex); if (aClient.indexOfMicrowave(this) == -1) { wasRemoved = true; } else { wasRemoved = aClient.removeMicrowave(this); if (!wasRemoved) { clients.add(oldIndex,aClient); } } return wasRemoved; } /* Code from template association_AddIndexControlFunctions */ public boolean addClientAtImpl(Client aClient, int index) { boolean wasAdded = false; if(addClient(aClient)) { if(index < 0 ) { index = 0; } if(index > numberOfClients()) { index = numberOfClients() - 1; } clients.remove(aClient); clients.add(index, aClient); wasAdded = true; } return wasAdded; } public boolean addOrMoveClientAtImpl(Client aClient, int index) { boolean wasAdded = false; if(clients.contains(aClient)) { if(index < 0 ) { index = 0; } if(index > numberOfClients()) { index = numberOfClients() - 1; } clients.remove(aClient); clients.add(index, aClient); wasAdded = true; } else { wasAdded = addClientAt(aClient, index); } return wasAdded; } public void deleteImpl() { ArrayList<Client> copyOfClients = new ArrayList<Client>(clients); clients.clear(); for(Client aClient : copyOfClients) { aClient.removeMicrowave(this); } } public String toString() { return super.toString() + "["+ "x" + ":" + getX()+ "," + "f" + ":" + getF()+ "]"; } public void setRealObject(IMicrowaveImpl aObject) { realObject=aObject; } transient IMicrowaveImpl realObject=this; public Microwave(int aX, String aF) { this(aX,aF,UmpleRuntime.getComponent("Microwave")); } public int getHashCode() { while(true) try{ return realObject.getHashCodeImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean setX(int aX) { while(true) try{ return realObject.setXImpl(aX); } catch(Exception e) {System.err.println(e.toString());} } public boolean setF(String aF) { while(true) try{ return realObject.setFImpl(aF); } catch(Exception e) {System.err.println(e.toString());} } public int getX() { while(true) try{ return realObject.getXImpl(); } catch(Exception e) {System.err.println(e.toString());} } public String getF() { while(true) try{ return realObject.getFImpl(); } catch(Exception e) {System.err.println(e.toString());} } public Client getClient(int index) { while(true) try{ return realObject.getClientImpl(index); } catch(Exception e) {System.err.println(e.toString());} } public List<Client> getClients() { while(true) try{ return realObject.getClientsImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfClients() { while(true) try{ return realObject.numberOfClientsImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasClients() { while(true) try{ return realObject.hasClientsImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfClient(Client aClient) { while(true) try{ return realObject.indexOfClientImpl(aClient); } catch(Exception e) {System.err.println(e.toString());} } public boolean addClient(Client aClient) { while(true) try{ return realObject.addClientImpl(aClient); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeClient(Client aClient) { while(true) try{ return realObject.removeClientImpl(aClient); } catch(Exception e) {System.err.println(e.toString());} } public boolean addClientAt(Client aClient, int index) { while(true) try{ return realObject.addClientAtImpl(aClient,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveClientAt(Client aClient, int index) { while(true) try{ return realObject.addOrMoveClientAtImpl(aClient,index); } catch(Exception e) {System.err.println(e.toString());} } public void delete() { while(true) try{ realObject.deleteImpl(); break; } catch(Exception e) {System.err.println(e.toString());} } protected IMicrowaveImpl remoteObject; public void setRemoteObject(IMicrowaveImpl aRemoteObject) { remoteObject=aRemoteObject; } public IMicrowaveImpl getRemoteObject() { return (IMicrowaveImpl)remoteObject; } private void readObject(java.io.ObjectInputStream in) throws Exception { try { in.defaultReadObject(); realObject=(IMicrowaveImpl)remoteObject; } catch(Exception e) { throw e; } } public boolean equals(Object obj) { if(obj.getClass()!=this.getClass()) return false; return (getHashCode()==((Microwave)obj).getHashCode()); } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceWS; import java.util.*; import java.io.Serializable; import javax.xml.namespace.QName; import java.net.URL; import javax.xml.ws.Service; import javax.xml.ws.Endpoint; import javax.jws.WebService; import javax.xml.bind.Unmarshaller; import javax.xml.bind.annotation.*; // line 124 "../ecommerceWS.ump" @WebService(endpointInterface = "ecommerceWS.ISystemManagerImpl") @XmlAccessorType(XmlAccessType.FIELD) @XmlType(factoryMethod="umplenewInstance", propOrder={"remoteUrl", "objectId", "remotePort"}) public class SystemManager implements java.io.Serializable, ISystemManagerImpl { //------------------------ // STATIC VARIABLES //------------------------ private static SystemManager theInstance = null; //------------------------ // MEMBER VARIABLES //------------------------ //SystemManager Associations private transient List<Agent> agents; private transient List<Warehouse> warehouses; private transient List<Customer> customers; private transient List<Order> orders; //------------------------ // CONSTRUCTOR //------------------------ private SystemManager(UmpleRuntime.UmpleComponent umpleComponent) { if(umpleComponent.getNode().getId()!=UmpleRuntime.getThisNodeId()) { if(this.getClass()== SystemManager.class) UmpleRuntime.getInstance().newSystemManager( umpleComponent, this); return; } else { UmpleRuntime.getInstance().newSystemManager(this); } agents = new ArrayList<Agent>(); warehouses = new ArrayList<Warehouse>(); customers = new ArrayList<Customer>(); orders = new ArrayList<Order>(); } public static SystemManager getInstance() { if(theInstance == null) { theInstance = new SystemManager(); } return theInstance; } //------------------------ // Returning the Hashcode //------------------------ public int getHashCodeImpl() { return hashCode(); } //------------------------ // INTERFACE //------------------------ /* Code from template association_GetMany */ public Agent getAgentImpl(int index) { Agent aAgent = agents.get(index); return aAgent; } public List<Agent> getAgents() { List<Agent> newAgents = Collections.unmodifiableList(agents); return newAgents; } public int numberOfAgentsImpl() { int number = agents.size(); return number; } public boolean hasAgentsImpl() { boolean has = agents.size() > 0; return has; } public int indexOfAgentImpl(Agent aAgent) { int index = agents.indexOf(aAgent); return index; } /* Code from template association_GetMany */ public Warehouse getWarehousImpl(int index) { Warehouse aWarehous = warehouses.get(index); return aWarehous; } public List<Warehouse> getWarehouses() { List<Warehouse> newWarehouses = Collections.unmodifiableList(warehouses); return newWarehouses; } public int numberOfWarehousesImpl() { int number = warehouses.size(); return number; } public boolean hasWarehousesImpl() { boolean has = warehouses.size() > 0; return has; } public int indexOfWarehousImpl(Warehouse aWarehous) { int index = warehouses.indexOf(aWarehous); return index; } /* Code from template association_GetMany */ public Customer getCustomerImpl(int index) { Customer aCustomer = customers.get(index); return aCustomer; } public List<Customer> getCustomers() { List<Customer> newCustomers = Collections.unmodifiableList(customers); return newCustomers; } public int numberOfCustomersImpl() { int number = customers.size(); return number; } public boolean hasCustomersImpl() { boolean has = customers.size() > 0; return has; } public int indexOfCustomerImpl(Customer aCustomer) { int index = customers.indexOf(aCustomer); return index; } /* Code from template association_GetMany */ public Order getOrderImpl(int index) { Order aOrder = orders.get(index); return aOrder; } public List<Order> getOrders() { List<Order> newOrders = Collections.unmodifiableList(orders); return newOrders; } public int numberOfOrdersImpl() { int number = orders.size(); return number; } public boolean hasOrdersImpl() { boolean has = orders.size() > 0; return has; } public int indexOfOrderImpl(Order aOrder) { int index = orders.indexOf(aOrder); return index; } /* Code from template association_MinimumNumberOfMethod */ public static int minimumNumberOfAgents() { return 0; } /* Code from template association_AddManyToOptionalOne */ public boolean addAgentImpl(Agent aAgent) { boolean wasAdded = false; if (agents.contains(aAgent)) { return false; } SystemManager existingSystemManager = aAgent.getSystemManager(); if (existingSystemManager == null) { aAgent.setSystemManager(this); } else if (!this.equals(existingSystemManager)) { existingSystemManager.removeAgent(aAgent); addAgent(aAgent); } else { agents.add(aAgent); } wasAdded = true; return wasAdded; } public boolean removeAgentImpl(Agent aAgent) { boolean wasRemoved = false; if (agents.contains(aAgent)) { agents.remove(aAgent); aAgent.setSystemManager(null); wasRemoved = true; } return wasRemoved; } /* Code from template association_AddIndexControlFunctions */ public boolean addAgentAtImpl(Agent aAgent, int index) { boolean wasAdded = false; if(addAgent(aAgent)) { if(index < 0 ) { index = 0; } if(index > numberOfAgents()) { index = numberOfAgents() - 1; } agents.remove(aAgent); agents.add(index, aAgent); wasAdded = true; } return wasAdded; } public boolean addOrMoveAgentAtImpl(Agent aAgent, int index) { boolean wasAdded = false; if(agents.contains(aAgent)) { if(index < 0 ) { index = 0; } if(index > numberOfAgents()) { index = numberOfAgents() - 1; } agents.remove(aAgent); agents.add(index, aAgent); wasAdded = true; } else { wasAdded = addAgentAt(aAgent, index); } return wasAdded; } /* Code from template association_MinimumNumberOfMethod */ public static int minimumNumberOfWarehouses() { return 0; } /* Code from template association_AddManyToOptionalOne */ public boolean addWarehousImpl(Warehouse aWarehous) { boolean wasAdded = false; if (warehouses.contains(aWarehous)) { return false; } SystemManager existingSystemManager = aWarehous.getSystemManager(); if (existingSystemManager == null) { aWarehous.setSystemManager(this); } else if (!this.equals(existingSystemManager)) { existingSystemManager.removeWarehous(aWarehous); addWarehous(aWarehous); } else { warehouses.add(aWarehous); } wasAdded = true; return wasAdded; } public boolean removeWarehousImpl(Warehouse aWarehous) { boolean wasRemoved = false; if (warehouses.contains(aWarehous)) { warehouses.remove(aWarehous); aWarehous.setSystemManager(null); wasRemoved = true; } return wasRemoved; } /* Code from template association_AddIndexControlFunctions */ public boolean addWarehousAtImpl(Warehouse aWarehous, int index) { boolean wasAdded = false; if(addWarehous(aWarehous)) { if(index < 0 ) { index = 0; } if(index > numberOfWarehouses()) { index = numberOfWarehouses() - 1; } warehouses.remove(aWarehous); warehouses.add(index, aWarehous); wasAdded = true; } return wasAdded; } public boolean addOrMoveWarehousAtImpl(Warehouse aWarehous, int index) { boolean wasAdded = false; if(warehouses.contains(aWarehous)) { if(index < 0 ) { index = 0; } if(index > numberOfWarehouses()) { index = numberOfWarehouses() - 1; } warehouses.remove(aWarehous); warehouses.add(index, aWarehous); wasAdded = true; } else { wasAdded = addWarehousAt(aWarehous, index); } return wasAdded; } /* Code from template association_MinimumNumberOfMethod */ public static int minimumNumberOfCustomers() { return 0; } /* Code from template association_AddManyToOptionalOne */ public boolean addCustomerImpl(Customer aCustomer) { boolean wasAdded = false; if (customers.contains(aCustomer)) { return false; } SystemManager existingSystemManager = aCustomer.getSystemManager(); if (existingSystemManager == null) { aCustomer.setSystemManager(this); } else if (!this.equals(existingSystemManager)) { existingSystemManager.removeCustomer(aCustomer); addCustomer(aCustomer); } else { customers.add(aCustomer); } wasAdded = true; return wasAdded; } public boolean removeCustomerImpl(Customer aCustomer) { boolean wasRemoved = false; if (customers.contains(aCustomer)) { customers.remove(aCustomer); aCustomer.setSystemManager(null); wasRemoved = true; } return wasRemoved; } /* Code from template association_AddIndexControlFunctions */ public boolean addCustomerAtImpl(Customer aCustomer, int index) { boolean wasAdded = false; if(addCustomer(aCustomer)) { if(index < 0 ) { index = 0; } if(index > numberOfCustomers()) { index = numberOfCustomers() - 1; } customers.remove(aCustomer); customers.add(index, aCustomer); wasAdded = true; } return wasAdded; } public boolean addOrMoveCustomerAtImpl(Customer aCustomer, int index) { boolean wasAdded = false; if(customers.contains(aCustomer)) { if(index < 0 ) { index = 0; } if(index > numberOfCustomers()) { index = numberOfCustomers() - 1; } customers.remove(aCustomer); customers.add(index, aCustomer); wasAdded = true; } else { wasAdded = addCustomerAt(aCustomer, index); } return wasAdded; } /* Code from template association_MinimumNumberOfMethod */ public static int minimumNumberOfOrders() { return 0; } /* Code from template association_AddManyToOptionalOne */ public boolean addOrderImpl(Order aOrder) { boolean wasAdded = false; if (orders.contains(aOrder)) { return false; } SystemManager existingSystemManager = aOrder.getSystemManager(); if (existingSystemManager == null) { aOrder.setSystemManager(this); } else if (!this.equals(existingSystemManager)) { existingSystemManager.removeOrder(aOrder); addOrder(aOrder); } else { orders.add(aOrder); } wasAdded = true; return wasAdded; } public boolean removeOrderImpl(Order aOrder) { boolean wasRemoved = false; if (orders.contains(aOrder)) { orders.remove(aOrder); aOrder.setSystemManager(null); wasRemoved = true; } return wasRemoved; } /* Code from template association_AddIndexControlFunctions */ public boolean addOrderAtImpl(Order aOrder, int index) { boolean wasAdded = false; if(addOrder(aOrder)) { if(index < 0 ) { index = 0; } if(index > numberOfOrders()) { index = numberOfOrders() - 1; } orders.remove(aOrder); orders.add(index, aOrder); wasAdded = true; } return wasAdded; } public boolean addOrMoveOrderAtImpl(Order aOrder, int index) { boolean wasAdded = false; if(orders.contains(aOrder)) { if(index < 0 ) { index = 0; } if(index > numberOfOrders()) { index = numberOfOrders() - 1; } orders.remove(aOrder); orders.add(index, aOrder); wasAdded = true; } else { wasAdded = addOrderAt(aOrder, index); } return wasAdded; } public void deleteImpl() { while( !agents.isEmpty() ) { agents.get(0).setSystemManager(null); } while( !warehouses.isEmpty() ) { warehouses.get(0).setSystemManager(null); } while( !customers.isEmpty() ) { customers.get(0).setSystemManager(null); } while( !orders.isEmpty() ) { orders.get(0).setSystemManager(null); } } transient ISystemManagerImpl realObject=this; private SystemManager() { this(UmpleRuntime.getComponent("SystemManager")); } public int getHashCode() { while(true) try{ return realObject.getHashCodeImpl(); } catch(Exception e) {System.err.println(e.toString());} } public Agent getAgent(int index) { while(true) try{ return realObject.getAgentImpl(index); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfAgents() { while(true) try{ return realObject.numberOfAgentsImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasAgents() { while(true) try{ return realObject.hasAgentsImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfAgent(Agent aAgent) { while(true) try{ return realObject.indexOfAgentImpl(aAgent); } catch(Exception e) {System.err.println(e.toString());} } public Warehouse getWarehous(int index) { while(true) try{ return realObject.getWarehousImpl(index); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfWarehouses() { while(true) try{ return realObject.numberOfWarehousesImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasWarehouses() { while(true) try{ return realObject.hasWarehousesImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfWarehous(Warehouse aWarehous) { while(true) try{ return realObject.indexOfWarehousImpl(aWarehous); } catch(Exception e) {System.err.println(e.toString());} } public Customer getCustomer(int index) { while(true) try{ return realObject.getCustomerImpl(index); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfCustomers() { while(true) try{ return realObject.numberOfCustomersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasCustomers() { while(true) try{ return realObject.hasCustomersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfCustomer(Customer aCustomer) { while(true) try{ return realObject.indexOfCustomerImpl(aCustomer); } catch(Exception e) {System.err.println(e.toString());} } public Order getOrder(int index) { while(true) try{ return realObject.getOrderImpl(index); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfOrders() { while(true) try{ return realObject.numberOfOrdersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasOrders() { while(true) try{ return realObject.hasOrdersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfOrder(Order aOrder) { while(true) try{ return realObject.indexOfOrderImpl(aOrder); } catch(Exception e) {System.err.println(e.toString());} } public boolean addAgent(Agent aAgent) { while(true) try{ return realObject.addAgentImpl(aAgent); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeAgent(Agent aAgent) { while(true) try{ return realObject.removeAgentImpl(aAgent); } catch(Exception e) {System.err.println(e.toString());} } public boolean addAgentAt(Agent aAgent, int index) { while(true) try{ return realObject.addAgentAtImpl(aAgent,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveAgentAt(Agent aAgent, int index) { while(true) try{ return realObject.addOrMoveAgentAtImpl(aAgent,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addWarehous(Warehouse aWarehous) { while(true) try{ return realObject.addWarehousImpl(aWarehous); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeWarehous(Warehouse aWarehous) { while(true) try{ return realObject.removeWarehousImpl(aWarehous); } catch(Exception e) {System.err.println(e.toString());} } public boolean addWarehousAt(Warehouse aWarehous, int index) { while(true) try{ return realObject.addWarehousAtImpl(aWarehous,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveWarehousAt(Warehouse aWarehous, int index) { while(true) try{ return realObject.addOrMoveWarehousAtImpl(aWarehous,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addCustomer(Customer aCustomer) { while(true) try{ return realObject.addCustomerImpl(aCustomer); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeCustomer(Customer aCustomer) { while(true) try{ return realObject.removeCustomerImpl(aCustomer); } catch(Exception e) {System.err.println(e.toString());} } public boolean addCustomerAt(Customer aCustomer, int index) { while(true) try{ return realObject.addCustomerAtImpl(aCustomer,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveCustomerAt(Customer aCustomer, int index) { while(true) try{ return realObject.addOrMoveCustomerAtImpl(aCustomer,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrder(Order aOrder) { while(true) try{ return realObject.addOrderImpl(aOrder); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeOrder(Order aOrder) { while(true) try{ return realObject.removeOrderImpl(aOrder); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrderAt(Order aOrder, int index) { while(true) try{ return realObject.addOrderAtImpl(aOrder,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveOrderAt(Order aOrder, int index) { while(true) try{ return realObject.addOrMoveOrderAtImpl(aOrder,index); } catch(Exception e) {System.err.println(e.toString());} } public void delete() { while(true) try{ realObject.deleteImpl(); break; } catch(Exception e) {System.err.println(e.toString());} } public String remoteUrl; public String objectId; public String remotePort; private static SystemManager umplenewInstance() { return new SystemManager((UmpleRuntime.UmpleNode)null); } protected SystemManager (UmpleRuntime.UmpleNode node) { } public void setRealObject(ISystemManagerImpl aObject) { realObject=aObject; } void afterUnmarshal(Unmarshaller u, Object parent) { initializeConnection(); } private void initializeConnection() { if(objectId.contains(SystemManager.class.getName())) { boolean success = false; while (!success) { try { URL url = new URL(remoteUrl+":"+remotePort+"/SystemManager"+objectId+"?wsdl"); QName qname = new QName("https://ecommerceWS/","SystemManagerService"); Service service = Service.create(url, qname); setRealObject(service.getPort(ISystemManagerImpl.class)); success = true; } catch (Exception e) { System.err.println("Client exception: " + e.toString()); e.printStackTrace(); try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } } } } public boolean equals(Object obj) { if(obj.getClass()!=this.getClass()) return false; return (getHashCode()==((SystemManager)obj).getHashCode()); } public static SystemManager getInstance(UmpleRuntime.UmpleComponent umpleComponent) { if(theInstance == null) { theInstance = new SystemManager(umpleComponent); } return theInstance; } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ // line 1 "Interface_DistributableRMI.ump" public interface IClient { } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package distributed.rmi3; import java.io.Serializable; import java.rmi.RemoteException; public interface IClientImpl extends java.rmi.Remote, ICCImpl { public int getHashCodeImpl() throws RemoteException; public void deleteImpl() throws RemoteException; } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceRMI1; import java.util.*; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; import java.rmi.RemoteException; import java.io.Serializable; import ecommerceRMI1.UmpleRuntime; public class Agent implements java.io.Serializable { public void setRealObject(IAgentImpl aObject) { realObject=aObject; } IAgentImpl realObject; public Agent(String aName, UmpleRuntime.UmpleComponent component) { if(this.getClass()== Agent.class) setRealObject(UmpleRuntime.getInstance().newAgent(aName, component, this)); } public Agent(String aName) { if(this.getClass()== Agent.class) setRealObject(UmpleRuntime.getInstance().newAgent(aName, this)); } public void setSelf(Agent proxy) { while(true) try{ realObject.setSelf(proxy); break; } catch(Exception e) {System.err.println(e.toString());} } public int getHashCode() { while(true) try{ return realObject.getHashCode(); } catch(Exception e) {System.err.println(e.toString());} } public boolean setName(String aName) { while(true) try{ return realObject.setName(aName); } catch(Exception e) {System.err.println(e.toString());} } public String getName() { while(true) try{ return realObject.getName(); } catch(Exception e) {System.err.println(e.toString());} } public Warehouse getWarehous(int index) { while(true) try{ return realObject.getWarehous(index); } catch(Exception e) {System.err.println(e.toString());} } public List<Warehouse> getWarehouses() { while(true) try{ return realObject.getWarehouses(); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfWarehouses() { while(true) try{ return realObject.numberOfWarehouses(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasWarehouses() { while(true) try{ return realObject.hasWarehouses(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfWarehous(Warehouse aWarehous) { while(true) try{ return realObject.indexOfWarehous(aWarehous); } catch(Exception e) {System.err.println(e.toString());} } public SystemManager getSystemManager() { while(true) try{ return realObject.getSystemManager(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasSystemManager() { while(true) try{ return realObject.hasSystemManager(); } catch(Exception e) {System.err.println(e.toString());} } public static int minimumNumberOfWarehouses() { while(true) try{ return AgentImpl.minimumNumberOfWarehouses(); } catch(Exception e) {System.err.println(e.toString());} } public boolean addWarehous(Warehouse aWarehous) { while(true) try{ return realObject.addWarehous(aWarehous); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeWarehous(Warehouse aWarehous) { while(true) try{ return realObject.removeWarehous(aWarehous); } catch(Exception e) {System.err.println(e.toString());} } public boolean addWarehousAt(Warehouse aWarehous, int index) { while(true) try{ return realObject.addWarehousAt(aWarehous,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveWarehousAt(Warehouse aWarehous, int index) { while(true) try{ return realObject.addOrMoveWarehousAt(aWarehous,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean setSystemManager(SystemManager aSystemManager) { while(true) try{ return realObject.setSystemManager(aSystemManager); } catch(Exception e) {System.err.println(e.toString());} } public void delete() { while(true) try{ realObject.delete(); break; } catch(Exception e) {System.err.println(e.toString());} } public boolean equals(Object obj) { if(obj.getClass()!=this.getClass()) return false; return (getHashCode()==((Agent)obj).getHashCode()); } protected Agent(){} } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceRMI1; import java.io.Serializable; // line 39 "../ecommerceRMI1.ump" public class Order implements java.io.Serializable { //------------------------ // MEMBER VARIABLES //------------------------ //Order Associations private Customer customer; private Vendor vendor; private Product product; private SystemManager systemManager; //------------------------ // CONSTRUCTOR //------------------------ public Order(Product aProduct) { if (!setProduct(aProduct)) { throw new RuntimeException("Unable to create Order due to aProduct. See https://manual.umple.org?RE002ViolationofAssociationMultiplicity.html"); } } //------------------------ // INTERFACE //------------------------ /* Code from template association_GetOne */ public Customer getCustomer() { return customer; } public boolean hasCustomer() { boolean has = customer != null; return has; } /* Code from template association_GetOne */ public Vendor getVendor() { return vendor; } public boolean hasVendor() { boolean has = vendor != null; return has; } /* Code from template association_GetOne */ public Product getProduct() { return product; } /* Code from template association_GetOne */ public SystemManager getSystemManager() { return systemManager; } public boolean hasSystemManager() { boolean has = systemManager != null; return has; } /* Code from template association_SetOptionalOneToMany */ public boolean setCustomer(Customer aCustomer) { boolean wasSet = false; Customer existingCustomer = customer; customer = aCustomer; if (existingCustomer != null && !existingCustomer.equals(aCustomer)) { existingCustomer.removeOrder(this); } if (aCustomer != null) { aCustomer.addOrder(this); } wasSet = true; return wasSet; } /* Code from template association_SetOptionalOneToMany */ public boolean setVendor(Vendor aVendor) { boolean wasSet = false; Vendor existingVendor = vendor; vendor = aVendor; if (existingVendor != null && !existingVendor.equals(aVendor)) { existingVendor.removeOrder(this); } if (aVendor != null) { aVendor.addOrder(this); } wasSet = true; return wasSet; } /* Code from template association_SetUnidirectionalOne */ public boolean setProduct(Product aNewProduct) { boolean wasSet = false; if (aNewProduct != null) { product = aNewProduct; wasSet = true; } return wasSet; } /* Code from template association_SetOptionalOneToMany */ public boolean setSystemManager(SystemManager aSystemManager) { boolean wasSet = false; SystemManager existingSystemManager = systemManager; systemManager = aSystemManager; if (existingSystemManager != null && !existingSystemManager.equals(aSystemManager)) { existingSystemManager.removeOrder(this); } if (aSystemManager != null) { aSystemManager.addOrder(this); } wasSet = true; return wasSet; } public void delete() { if (customer != null) { Customer placeholderCustomer = customer; this.customer = null; placeholderCustomer.removeOrder(this); } if (vendor != null) { Vendor placeholderVendor = vendor; this.vendor = null; placeholderVendor.removeOrder(this); } product = null; if (systemManager != null) { SystemManager placeholderSystemManager = systemManager; this.systemManager = null; placeholderSystemManager.removeOrder(this); } } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceRMI0; import java.util.*; import java.io.Serializable; import java.rmi.registry.Registry; import java.rmi.registry.LocateRegistry; import java.rmi.server.UnicastRemoteObject; public class VendorRemote extends AgentRemote implements IVendorImpl { Vendor realObject; public void setRealObject(Vendor aObject) { realObject=aObject; } public VendorRemote() {} public VendorRemote(Vendor aObject) { super(aObject); realObject=aObject; } public int getHashCodeImpl() { while(true) try{ return realObject.getHashCodeImpl(); } catch(Exception e) {System.err.println(e.toString());} } public Order getOrderImpl(int index) { while(true) try{ return realObject.getOrderImpl(index); } catch(Exception e) {System.err.println(e.toString());} } public List<Order> getOrdersImpl() { while(true) try{ return realObject.getOrdersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfOrdersImpl() { while(true) try{ return realObject.numberOfOrdersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasOrdersImpl() { while(true) try{ return realObject.hasOrdersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfOrderImpl(Order aOrder) { while(true) try{ return realObject.indexOfOrderImpl(aOrder); } catch(Exception e) {System.err.println(e.toString());} } public Customer getCustomerImpl(int index) { while(true) try{ return realObject.getCustomerImpl(index); } catch(Exception e) {System.err.println(e.toString());} } public List<Customer> getCustomersImpl() { while(true) try{ return realObject.getCustomersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfCustomersImpl() { while(true) try{ return realObject.numberOfCustomersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasCustomersImpl() { while(true) try{ return realObject.hasCustomersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfCustomerImpl(Customer aCustomer) { while(true) try{ return realObject.indexOfCustomerImpl(aCustomer); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrderImpl(Order aOrder) { while(true) try{ return realObject.addOrderImpl(aOrder); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeOrderImpl(Order aOrder) { while(true) try{ return realObject.removeOrderImpl(aOrder); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrderAtImpl(Order aOrder, int index) { while(true) try{ return realObject.addOrderAtImpl(aOrder,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveOrderAtImpl(Order aOrder, int index) { while(true) try{ return realObject.addOrMoveOrderAtImpl(aOrder,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addCustomerImpl(Customer aCustomer) { while(true) try{ return realObject.addCustomerImpl(aCustomer); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeCustomerImpl(Customer aCustomer) { while(true) try{ return realObject.removeCustomerImpl(aCustomer); } catch(Exception e) {System.err.println(e.toString());} } public boolean addCustomerAtImpl(Customer aCustomer, int index) { while(true) try{ return realObject.addCustomerAtImpl(aCustomer,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveCustomerAtImpl(Customer aCustomer, int index) { while(true) try{ return realObject.addOrMoveCustomerAtImpl(aCustomer,index); } catch(Exception e) {System.err.println(e.toString());} } public void deleteImpl() { while(true) try{ realObject.deleteImpl(); break; } catch(Exception e) {System.err.println(e.toString());} } public Product findProductImpl(ProductType productType) { while(true) try{ return realObject.findProductImpl(productType); } catch(Exception e) {System.err.println(e.toString());} } public Order makeOrderImpl(Customer aCustomer, Product aProduct) { while(true) try{ return realObject.makeOrderImpl(aCustomer,aProduct); } catch(Exception e) {System.err.println(e.toString());} } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceRMI1; import java.util.*; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; // line 46 "../ecommerceRMI1.ump" public class SupplierImpl extends AgentImpl implements java.io.Serializable , ISupplierImpl { //------------------------ // MEMBER VARIABLES //------------------------ //SupplierImpl Associations private List<Product> products; //------------------------ // CONSTRUCTOR //------------------------ public SupplierImpl(String aName) { super(aName); products = new ArrayList<Product>(); } //------------------------ // Reference to the proxy //------------------------ Supplier self; public void setSelf(Supplier proxy) { super.setSelf(proxy); self=proxy; } //------------------------ // Returning the Hashcode //------------------------ public int getHashCode() { return hashCode(); } //------------------------ // INTERFACE //------------------------ /* Code from template association_GetMany */ public Product getProduct(int index) { Product aProduct = products.get(index); return aProduct; } public List<Product> getProducts() { List<Product> newProducts = Collections.unmodifiableList(products); return newProducts; } public int numberOfProducts() { int number = products.size(); return number; } public boolean hasProducts() { boolean has = products.size() > 0; return has; } public int indexOfProduct(Product aProduct) { int index = products.indexOf(aProduct); return index; } /* Code from template association_MinimumNumberOfMethod */ public static int minimumNumberOfProducts() { return 0; } /* Code from template association_AddUnidirectionalMany */ public boolean addProduct(Product aProduct) { boolean wasAdded = false; if (products.contains(aProduct)) { return false; } products.add(aProduct); wasAdded = true; return wasAdded; } public boolean removeProduct(Product aProduct) { boolean wasRemoved = false; if (products.contains(aProduct)) { products.remove(aProduct); wasRemoved = true; } return wasRemoved; } /* Code from template association_AddIndexControlFunctions */ public boolean addProductAt(Product aProduct, int index) { boolean wasAdded = false; if(addProduct(aProduct)) { if(index < 0 ) { index = 0; } if(index > numberOfProducts()) { index = numberOfProducts() - 1; } products.remove(aProduct); products.add(index, aProduct); wasAdded = true; } return wasAdded; } public boolean addOrMoveProductAt(Product aProduct, int index) { boolean wasAdded = false; if(products.contains(aProduct)) { if(index < 0 ) { index = 0; } if(index > numberOfProducts()) { index = numberOfProducts() - 1; } products.remove(aProduct); products.add(index, aProduct); wasAdded = true; } else { wasAdded = addProductAt(aProduct, index); } return wasAdded; } public void delete() { products.clear(); super.delete(); } // line 52 "../ecommerceRMI1.ump" public Product createProduct(String serialNumber, String productType){ Product aProduct=new Product(serialNumber,new ProductType(productType)); addProduct(aProduct); return aProduct; } // line 58 "../ecommerceRMI1.ump" public void putInWarehouse(Product aProduct, Warehouse warehouse){ warehouse.addProduct(aProduct); } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceWS; import java.util.*; import java.io.Serializable; import javax.xml.namespace.QName; import java.net.URL; import javax.xml.ws.Service; import javax.xml.ws.Endpoint; import javax.jws.WebService; import javax.xml.bind.Unmarshaller; import javax.xml.bind.annotation.*; // line 63 "../ecommerceWS.ump" @WebService(endpointInterface = "ecommerceWS.IVendorImpl") @XmlAccessorType(XmlAccessType.FIELD) @XmlType(factoryMethod="umplenewInstance", propOrder={}) public class Vendor extends Agent implements java.io.Serializable, IVendorImpl { //------------------------ // MEMBER VARIABLES //------------------------ //Vendor Associations private transient List<Warehouse> warehouses; private transient List<Order> orders; private transient List<Customer> customers; //------------------------ // CONSTRUCTOR //------------------------ public Vendor(String aName, UmpleRuntime.UmpleComponent umpleComponent) { super(aName,umpleComponent); if(umpleComponent.getNode().getId()!=UmpleRuntime.getThisNodeId()) { if(this.getClass()== Vendor.class) UmpleRuntime.getInstance().newVendor(aName, umpleComponent, this); return; } warehouses = new ArrayList<Warehouse>(); orders = new ArrayList<Order>(); customers = new ArrayList<Customer>(); } //------------------------ // Returning the Hashcode //------------------------ public int getHashCodeImpl() { return hashCode(); } //------------------------ // INTERFACE //------------------------ /* Code from template association_GetMany */ public Warehouse getWarehousImpl(int index) { Warehouse aWarehous = warehouses.get(index); return aWarehous; } public List<Warehouse> getWarehouses() { List<Warehouse> newWarehouses = Collections.unmodifiableList(warehouses); return newWarehouses; } public int numberOfWarehousesImpl() { int number = warehouses.size(); return number; } public boolean hasWarehousesImpl() { boolean has = warehouses.size() > 0; return has; } public int indexOfWarehousImpl(Warehouse aWarehous) { int index = warehouses.indexOf(aWarehous); return index; } /* Code from template association_GetMany */ public Order getOrderImpl(int index) { Order aOrder = orders.get(index); return aOrder; } public List<Order> getOrders() { List<Order> newOrders = Collections.unmodifiableList(orders); return newOrders; } public int numberOfOrdersImpl() { int number = orders.size(); return number; } public boolean hasOrdersImpl() { boolean has = orders.size() > 0; return has; } public int indexOfOrderImpl(Order aOrder) { int index = orders.indexOf(aOrder); return index; } /* Code from template association_GetMany */ public Customer getCustomerImpl(int index) { Customer aCustomer = customers.get(index); return aCustomer; } public List<Customer> getCustomers() { List<Customer> newCustomers = Collections.unmodifiableList(customers); return newCustomers; } public int numberOfCustomersImpl() { int number = customers.size(); return number; } public boolean hasCustomersImpl() { boolean has = customers.size() > 0; return has; } public int indexOfCustomerImpl(Customer aCustomer) { int index = customers.indexOf(aCustomer); return index; } /* Code from template association_MinimumNumberOfMethod */ public static int minimumNumberOfWarehouses() { return 0; } /* Code from template association_AddManyToManyMethod */ public boolean addWarehousImpl(Warehouse aWarehous) { boolean wasAdded = false; if (warehouses.contains(aWarehous)) { return false; } warehouses.add(aWarehous); if (aWarehous.indexOfVendor(this) != -1) { wasAdded = true; } else { wasAdded = aWarehous.addVendor(this); if (!wasAdded) { warehouses.remove(aWarehous); } } return wasAdded; } /* Code from template association_RemoveMany */ public boolean removeWarehousImpl(Warehouse aWarehous) { boolean wasRemoved = false; if (!warehouses.contains(aWarehous)) { return wasRemoved; } int oldIndex = warehouses.indexOf(aWarehous); warehouses.remove(oldIndex); if (aWarehous.indexOfVendor(this) == -1) { wasRemoved = true; } else { wasRemoved = aWarehous.removeVendor(this); if (!wasRemoved) { warehouses.add(oldIndex,aWarehous); } } return wasRemoved; } /* Code from template association_AddIndexControlFunctions */ public boolean addWarehousAtImpl(Warehouse aWarehous, int index) { boolean wasAdded = false; if(addWarehous(aWarehous)) { if(index < 0 ) { index = 0; } if(index > numberOfWarehouses()) { index = numberOfWarehouses() - 1; } warehouses.remove(aWarehous); warehouses.add(index, aWarehous); wasAdded = true; } return wasAdded; } public boolean addOrMoveWarehousAtImpl(Warehouse aWarehous, int index) { boolean wasAdded = false; if(warehouses.contains(aWarehous)) { if(index < 0 ) { index = 0; } if(index > numberOfWarehouses()) { index = numberOfWarehouses() - 1; } warehouses.remove(aWarehous); warehouses.add(index, aWarehous); wasAdded = true; } else { wasAdded = addWarehousAt(aWarehous, index); } return wasAdded; } /* Code from template association_MinimumNumberOfMethod */ public static int minimumNumberOfOrders() { return 0; } /* Code from template association_AddManyToOptionalOne */ public boolean addOrderImpl(Order aOrder) { boolean wasAdded = false; if (orders.contains(aOrder)) { return false; } Vendor existingVendor = aOrder.getVendor(); if (existingVendor == null) { aOrder.setVendor(this); } else if (!this.equals(existingVendor)) { existingVendor.removeOrder(aOrder); addOrder(aOrder); } else { orders.add(aOrder); } wasAdded = true; return wasAdded; } public boolean removeOrderImpl(Order aOrder) { boolean wasRemoved = false; if (orders.contains(aOrder)) { orders.remove(aOrder); aOrder.setVendor(null); wasRemoved = true; } return wasRemoved; } /* Code from template association_AddIndexControlFunctions */ public boolean addOrderAtImpl(Order aOrder, int index) { boolean wasAdded = false; if(addOrder(aOrder)) { if(index < 0 ) { index = 0; } if(index > numberOfOrders()) { index = numberOfOrders() - 1; } orders.remove(aOrder); orders.add(index, aOrder); wasAdded = true; } return wasAdded; } public boolean addOrMoveOrderAtImpl(Order aOrder, int index) { boolean wasAdded = false; if(orders.contains(aOrder)) { if(index < 0 ) { index = 0; } if(index > numberOfOrders()) { index = numberOfOrders() - 1; } orders.remove(aOrder); orders.add(index, aOrder); wasAdded = true; } else { wasAdded = addOrderAt(aOrder, index); } return wasAdded; } /* Code from template association_MinimumNumberOfMethod */ public static int minimumNumberOfCustomers() { return 0; } /* Code from template association_AddManyToManyMethod */ public boolean addCustomerImpl(Customer aCustomer) { boolean wasAdded = false; if (customers.contains(aCustomer)) { return false; } customers.add(aCustomer); if (aCustomer.indexOfVendor(this) != -1) { wasAdded = true; } else { wasAdded = aCustomer.addVendor(this); if (!wasAdded) { customers.remove(aCustomer); } } return wasAdded; } /* Code from template association_RemoveMany */ public boolean removeCustomerImpl(Customer aCustomer) { boolean wasRemoved = false; if (!customers.contains(aCustomer)) { return wasRemoved; } int oldIndex = customers.indexOf(aCustomer); customers.remove(oldIndex); if (aCustomer.indexOfVendor(this) == -1) { wasRemoved = true; } else { wasRemoved = aCustomer.removeVendor(this); if (!wasRemoved) { customers.add(oldIndex,aCustomer); } } return wasRemoved; } /* Code from template association_AddIndexControlFunctions */ public boolean addCustomerAtImpl(Customer aCustomer, int index) { boolean wasAdded = false; if(addCustomer(aCustomer)) { if(index < 0 ) { index = 0; } if(index > numberOfCustomers()) { index = numberOfCustomers() - 1; } customers.remove(aCustomer); customers.add(index, aCustomer); wasAdded = true; } return wasAdded; } public boolean addOrMoveCustomerAtImpl(Customer aCustomer, int index) { boolean wasAdded = false; if(customers.contains(aCustomer)) { if(index < 0 ) { index = 0; } if(index > numberOfCustomers()) { index = numberOfCustomers() - 1; } customers.remove(aCustomer); customers.add(index, aCustomer); wasAdded = true; } else { wasAdded = addCustomerAt(aCustomer, index); } return wasAdded; } public void deleteImpl() { ArrayList<Warehouse> copyOfWarehouses = new ArrayList<Warehouse>(warehouses); warehouses.clear(); for(Warehouse aWarehous : copyOfWarehouses) { aWarehous.removeVendor(this); } while( !orders.isEmpty() ) { orders.get(0).setVendor(null); } ArrayList<Customer> copyOfCustomers = new ArrayList<Customer>(customers); customers.clear(); for(Customer aCustomer : copyOfCustomers) { aCustomer.removeVendor(this); } super.delete(); } // line 68 "../ecommerceWS.ump" public Product findProductImpl(ProductType productType){ for(Warehouse w:getWarehouses()) { Product p= w.findProduct(productType); if(p!=null) return p; } return null; } // line 77 "../ecommerceWS.ump" public Order makeOrderImpl(Customer aCustomer, Product aProduct){ if(aProduct==null) return null; Order aOrder= new Order(aProduct); aOrder.setCustomer(aCustomer); aOrder.setVendor(this); return aOrder; } transient IVendorImpl realObject=this; public Vendor(String aName) { this(aName,UmpleRuntime.getComponent("Vendor")); } public int getHashCode() { while(true) try{ return realObject.getHashCodeImpl(); } catch(Exception e) {System.err.println(e.toString());} } public Warehouse getWarehous(int index) { while(true) try{ return realObject.getWarehousImpl(index); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfWarehouses() { while(true) try{ return realObject.numberOfWarehousesImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasWarehouses() { while(true) try{ return realObject.hasWarehousesImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfWarehous(Warehouse aWarehous) { while(true) try{ return realObject.indexOfWarehousImpl(aWarehous); } catch(Exception e) {System.err.println(e.toString());} } public Order getOrder(int index) { while(true) try{ return realObject.getOrderImpl(index); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfOrders() { while(true) try{ return realObject.numberOfOrdersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasOrders() { while(true) try{ return realObject.hasOrdersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfOrder(Order aOrder) { while(true) try{ return realObject.indexOfOrderImpl(aOrder); } catch(Exception e) {System.err.println(e.toString());} } public Customer getCustomer(int index) { while(true) try{ return realObject.getCustomerImpl(index); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfCustomers() { while(true) try{ return realObject.numberOfCustomersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasCustomers() { while(true) try{ return realObject.hasCustomersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfCustomer(Customer aCustomer) { while(true) try{ return realObject.indexOfCustomerImpl(aCustomer); } catch(Exception e) {System.err.println(e.toString());} } public boolean addWarehous(Warehouse aWarehous) { while(true) try{ return realObject.addWarehousImpl(aWarehous); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeWarehous(Warehouse aWarehous) { while(true) try{ return realObject.removeWarehousImpl(aWarehous); } catch(Exception e) {System.err.println(e.toString());} } public boolean addWarehousAt(Warehouse aWarehous, int index) { while(true) try{ return realObject.addWarehousAtImpl(aWarehous,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveWarehousAt(Warehouse aWarehous, int index) { while(true) try{ return realObject.addOrMoveWarehousAtImpl(aWarehous,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrder(Order aOrder) { while(true) try{ return realObject.addOrderImpl(aOrder); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeOrder(Order aOrder) { while(true) try{ return realObject.removeOrderImpl(aOrder); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrderAt(Order aOrder, int index) { while(true) try{ return realObject.addOrderAtImpl(aOrder,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveOrderAt(Order aOrder, int index) { while(true) try{ return realObject.addOrMoveOrderAtImpl(aOrder,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addCustomer(Customer aCustomer) { while(true) try{ return realObject.addCustomerImpl(aCustomer); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeCustomer(Customer aCustomer) { while(true) try{ return realObject.removeCustomerImpl(aCustomer); } catch(Exception e) {System.err.println(e.toString());} } public boolean addCustomerAt(Customer aCustomer, int index) { while(true) try{ return realObject.addCustomerAtImpl(aCustomer,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveCustomerAt(Customer aCustomer, int index) { while(true) try{ return realObject.addOrMoveCustomerAtImpl(aCustomer,index); } catch(Exception e) {System.err.println(e.toString());} } public void delete() { while(true) try{ realObject.deleteImpl(); break; } catch(Exception e) {System.err.println(e.toString());} } public Product findProduct(ProductType productType) { while(true) try{ return realObject.findProductImpl(productType); } catch(Exception e) {System.err.println(e.toString());} } public Order makeOrder(Customer aCustomer, Product aProduct) { while(true) try{ return realObject.makeOrderImpl(aCustomer,aProduct); } catch(Exception e) {System.err.println(e.toString());} } private static Vendor umplenewInstance() { return new Vendor((UmpleRuntime.UmpleNode)null); } protected Vendor (UmpleRuntime.UmpleNode node) { super(node); } public void setRealObject(IVendorImpl aObject) { super.setRealObject(aObject); realObject=aObject; } void afterUnmarshal(Unmarshaller u, Object parent) { initializeConnection(); } private void initializeConnection() { if(objectId.contains(Vendor.class.getName())) { boolean success = false; while (!success) { try { URL url = new URL(remoteUrl+":"+remotePort+"/Vendor"+objectId+"?wsdl"); QName qname = new QName("https://ecommerceWS/","VendorService"); Service service = Service.create(url, qname); setRealObject(service.getPort(IVendorImpl.class)); success = true; } catch (Exception e) { System.err.println("Client exception: " + e.toString()); e.printStackTrace(); try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } } } } public boolean equals(Object obj) { if(obj.getClass()!=this.getClass()) return false; return (getHashCode()==((Vendor)obj).getHashCode()); } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceRMI1; import java.util.*; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; import java.rmi.RemoteException; public interface ICustomerImpl extends java.rmi.Remote { public void setSelf(Customer proxy) throws RemoteException; public int getHashCode() throws RemoteException; public boolean setName(String aName) throws RemoteException; public String getName() throws RemoteException; public Vendor getVendor(int index) throws RemoteException; public List<Vendor> getVendors() throws RemoteException; public int numberOfVendors() throws RemoteException; public boolean hasVendors() throws RemoteException; public int indexOfVendor(Vendor aVendor) throws RemoteException; public Order getOrder(int index) throws RemoteException; public List<Order> getOrders() throws RemoteException; public int numberOfOrders() throws RemoteException; public boolean hasOrders() throws RemoteException; public int indexOfOrder(Order aOrder) throws RemoteException; public SystemManager getSystemManager() throws RemoteException; public boolean hasSystemManager() throws RemoteException; public boolean addVendor(Vendor aVendor) throws RemoteException; public boolean removeVendor(Vendor aVendor) throws RemoteException; public boolean addVendorAt(Vendor aVendor, int index) throws RemoteException; public boolean addOrMoveVendorAt(Vendor aVendor, int index) throws RemoteException; public boolean addOrder(Order aOrder) throws RemoteException; public boolean removeOrder(Order aOrder) throws RemoteException; public boolean addOrderAt(Order aOrder, int index) throws RemoteException; public boolean addOrMoveOrderAt(Order aOrder, int index) throws RemoteException; public boolean setSystemManager(SystemManager aSystemManager) throws RemoteException; public void delete() throws RemoteException; public Order orderProduct(String productType, String vendorName) throws RemoteException; } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceRMI0; import java.io.Serializable; // line 81 "../ecommerceRMI0.ump" public class Product implements java.io.Serializable { //------------------------ // MEMBER VARIABLES //------------------------ //Product Attributes private String serialNumber; //Product Associations private ProductType productType; //Helper Variables private boolean canSetProductType; //------------------------ // CONSTRUCTOR //------------------------ public Product(String aSerialNumber, ProductType aProductType) { serialNumber = aSerialNumber; canSetProductType = true; if (!setProductType(aProductType)) { throw new RuntimeException("Unable to create Product due to aProductType. See https://manual.umple.org?RE002ViolationofAssociationMultiplicity.html"); } } //------------------------ // INTERFACE //------------------------ public String getSerialNumber() { return serialNumber; } /* Code from template association_GetOne */ public ProductType getProductType() { return productType; } /* Code from template association_SetUnidirectionalOne */ private boolean setProductType(ProductType aNewProductType) { boolean wasSet = false; if (!canSetProductType) { return false; } canSetProductType = false; if (aNewProductType != null) { productType = aNewProductType; wasSet = true; } return wasSet; } public void delete() {} public String toString() { return super.toString() + "["+ "serialNumber" + ":" + getSerialNumber()+ "]" + System.getProperties().getProperty("line.separator") + " " + "productType = "+(getProductType()!=null?Integer.toHexString(System.identityHashCode(getProductType())):"null"); } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package distributed.rmi2; import java.io.Serializable; import java.rmi.RemoteException; public interface ICCImpl extends java.rmi.Remote { public void delete() throws RemoteException; public void someMethod1() throws RemoteException; } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package distributed.rmi2; import java.io.Serializable; // line 8 "../../Class_DistributableRMI2.ump" public class CC { //------------------------ // MEMBER VARIABLES //------------------------ //------------------------ // CONSTRUCTOR //------------------------ public CC() {} //------------------------ // INTERFACE //------------------------ public void delete() {} // line 11 "../../Class_DistributableRMI2.ump" public void someMethod1(){ } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceWS; import java.util.*; import java.io.Serializable; import javax.xml.namespace.QName; import java.net.URL; import javax.xml.ws.Service; import javax.xml.ws.Endpoint; import javax.jws.WebService; import javax.xml.bind.Unmarshaller; import javax.xml.bind.annotation.*; // line 109 "../ecommerceWS.ump" @WebService(endpointInterface = "ecommerceWS.ICustomerImpl") @XmlAccessorType(XmlAccessType.FIELD) @XmlType(factoryMethod="umplenewInstance", propOrder={"remoteUrl", "objectId", "remotePort"}) public class Customer implements java.io.Serializable, ICustomerImpl { //------------------------ // MEMBER VARIABLES //------------------------ //Customer Attributes private transient String name; //Customer Associations private transient List<Vendor> vendors; private transient List<Order> orders; private transient SystemManager systemManager; //------------------------ // CONSTRUCTOR //------------------------ public Customer(String aName, UmpleRuntime.UmpleComponent umpleComponent) { if(umpleComponent.getNode().getId()!=UmpleRuntime.getThisNodeId()) { if(this.getClass()== Customer.class) UmpleRuntime.getInstance().newCustomer(aName, umpleComponent, this); return; } else { UmpleRuntime.getInstance().newCustomer(this); } name = aName; vendors = new ArrayList<Vendor>(); orders = new ArrayList<Order>(); } //------------------------ // Returning the Hashcode //------------------------ public int getHashCodeImpl() { return hashCode(); } //------------------------ // INTERFACE //------------------------ public boolean setNameImpl(String aName) { boolean wasSet = false; name = aName; wasSet = true; return wasSet; } public String getNameImpl() { return name; } /* Code from template association_GetMany */ public Vendor getVendorImpl(int index) { Vendor aVendor = vendors.get(index); return aVendor; } public List<Vendor> getVendors() { List<Vendor> newVendors = Collections.unmodifiableList(vendors); return newVendors; } public int numberOfVendorsImpl() { int number = vendors.size(); return number; } public boolean hasVendorsImpl() { boolean has = vendors.size() > 0; return has; } public int indexOfVendorImpl(Vendor aVendor) { int index = vendors.indexOf(aVendor); return index; } /* Code from template association_GetMany */ public Order getOrderImpl(int index) { Order aOrder = orders.get(index); return aOrder; } public List<Order> getOrders() { List<Order> newOrders = Collections.unmodifiableList(orders); return newOrders; } public int numberOfOrdersImpl() { int number = orders.size(); return number; } public boolean hasOrdersImpl() { boolean has = orders.size() > 0; return has; } public int indexOfOrderImpl(Order aOrder) { int index = orders.indexOf(aOrder); return index; } /* Code from template association_GetOne */ public SystemManager getSystemManagerImpl() { return systemManager; } public boolean hasSystemManagerImpl() { boolean has = systemManager != null; return has; } /* Code from template association_MinimumNumberOfMethod */ public static int minimumNumberOfVendors() { return 0; } /* Code from template association_AddManyToManyMethod */ public boolean addVendorImpl(Vendor aVendor) { boolean wasAdded = false; if (vendors.contains(aVendor)) { return false; } vendors.add(aVendor); if (aVendor.indexOfCustomer(this) != -1) { wasAdded = true; } else { wasAdded = aVendor.addCustomer(this); if (!wasAdded) { vendors.remove(aVendor); } } return wasAdded; } /* Code from template association_RemoveMany */ public boolean removeVendorImpl(Vendor aVendor) { boolean wasRemoved = false; if (!vendors.contains(aVendor)) { return wasRemoved; } int oldIndex = vendors.indexOf(aVendor); vendors.remove(oldIndex); if (aVendor.indexOfCustomer(this) == -1) { wasRemoved = true; } else { wasRemoved = aVendor.removeCustomer(this); if (!wasRemoved) { vendors.add(oldIndex,aVendor); } } return wasRemoved; } /* Code from template association_AddIndexControlFunctions */ public boolean addVendorAtImpl(Vendor aVendor, int index) { boolean wasAdded = false; if(addVendor(aVendor)) { if(index < 0 ) { index = 0; } if(index > numberOfVendors()) { index = numberOfVendors() - 1; } vendors.remove(aVendor); vendors.add(index, aVendor); wasAdded = true; } return wasAdded; } public boolean addOrMoveVendorAtImpl(Vendor aVendor, int index) { boolean wasAdded = false; if(vendors.contains(aVendor)) { if(index < 0 ) { index = 0; } if(index > numberOfVendors()) { index = numberOfVendors() - 1; } vendors.remove(aVendor); vendors.add(index, aVendor); wasAdded = true; } else { wasAdded = addVendorAt(aVendor, index); } return wasAdded; } /* Code from template association_MinimumNumberOfMethod */ public static int minimumNumberOfOrders() { return 0; } /* Code from template association_AddManyToOptionalOne */ public boolean addOrderImpl(Order aOrder) { boolean wasAdded = false; if (orders.contains(aOrder)) { return false; } Customer existingCustomer = aOrder.getCustomer(); if (existingCustomer == null) { aOrder.setCustomer(this); } else if (!this.equals(existingCustomer)) { existingCustomer.removeOrder(aOrder); addOrder(aOrder); } else { orders.add(aOrder); } wasAdded = true; return wasAdded; } public boolean removeOrderImpl(Order aOrder) { boolean wasRemoved = false; if (orders.contains(aOrder)) { orders.remove(aOrder); aOrder.setCustomer(null); wasRemoved = true; } return wasRemoved; } /* Code from template association_AddIndexControlFunctions */ public boolean addOrderAtImpl(Order aOrder, int index) { boolean wasAdded = false; if(addOrder(aOrder)) { if(index < 0 ) { index = 0; } if(index > numberOfOrders()) { index = numberOfOrders() - 1; } orders.remove(aOrder); orders.add(index, aOrder); wasAdded = true; } return wasAdded; } public boolean addOrMoveOrderAtImpl(Order aOrder, int index) { boolean wasAdded = false; if(orders.contains(aOrder)) { if(index < 0 ) { index = 0; } if(index > numberOfOrders()) { index = numberOfOrders() - 1; } orders.remove(aOrder); orders.add(index, aOrder); wasAdded = true; } else { wasAdded = addOrderAt(aOrder, index); } return wasAdded; } /* Code from template association_SetOptionalOneToMany */ public boolean setSystemManagerImpl(SystemManager aSystemManager) { boolean wasSet = false; SystemManager existingSystemManager = systemManager; systemManager = aSystemManager; if (existingSystemManager != null && !existingSystemManager.equals(aSystemManager)) { existingSystemManager.removeCustomer(this); } if (aSystemManager != null) { aSystemManager.addCustomer(this); } wasSet = true; return wasSet; } public void deleteImpl() { ArrayList<Vendor> copyOfVendors = new ArrayList<Vendor>(vendors); vendors.clear(); for(Vendor aVendor : copyOfVendors) { aVendor.removeCustomer(this); } while( !orders.isEmpty() ) { orders.get(0).setCustomer(null); } if (systemManager != null) { SystemManager placeholderSystemManager = systemManager; this.systemManager = null; placeholderSystemManager.removeCustomer(this); } } // line 115 "../ecommerceWS.ump" public Order orderProductImpl(String productType, String vendorName){ for(Vendor v: getVendors()) { if(v.getName().equals(vendorName)) return v.makeOrder(this,v.findProduct(new ProductType(productType))); } return null; } public String toString() { return super.toString() + "["+ "name" + ":" + getName()+ "]" + System.getProperties().getProperty("line.separator") + " " + "systemManager = "+(getSystemManager()!=null?Integer.toHexString(System.identityHashCode(getSystemManager())):"null"); } transient ICustomerImpl realObject=this; public Customer(String aName) { this(aName,UmpleRuntime.getComponent("Customer")); } public int getHashCode() { while(true) try{ return realObject.getHashCodeImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean setName(String aName) { while(true) try{ return realObject.setNameImpl(aName); } catch(Exception e) {System.err.println(e.toString());} } public String getName() { while(true) try{ return realObject.getNameImpl(); } catch(Exception e) {System.err.println(e.toString());} } public Vendor getVendor(int index) { while(true) try{ return realObject.getVendorImpl(index); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfVendors() { while(true) try{ return realObject.numberOfVendorsImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasVendors() { while(true) try{ return realObject.hasVendorsImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfVendor(Vendor aVendor) { while(true) try{ return realObject.indexOfVendorImpl(aVendor); } catch(Exception e) {System.err.println(e.toString());} } public Order getOrder(int index) { while(true) try{ return realObject.getOrderImpl(index); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfOrders() { while(true) try{ return realObject.numberOfOrdersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasOrders() { while(true) try{ return realObject.hasOrdersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfOrder(Order aOrder) { while(true) try{ return realObject.indexOfOrderImpl(aOrder); } catch(Exception e) {System.err.println(e.toString());} } public SystemManager getSystemManager() { while(true) try{ return realObject.getSystemManagerImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasSystemManager() { while(true) try{ return realObject.hasSystemManagerImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean addVendor(Vendor aVendor) { while(true) try{ return realObject.addVendorImpl(aVendor); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeVendor(Vendor aVendor) { while(true) try{ return realObject.removeVendorImpl(aVendor); } catch(Exception e) {System.err.println(e.toString());} } public boolean addVendorAt(Vendor aVendor, int index) { while(true) try{ return realObject.addVendorAtImpl(aVendor,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveVendorAt(Vendor aVendor, int index) { while(true) try{ return realObject.addOrMoveVendorAtImpl(aVendor,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrder(Order aOrder) { while(true) try{ return realObject.addOrderImpl(aOrder); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeOrder(Order aOrder) { while(true) try{ return realObject.removeOrderImpl(aOrder); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrderAt(Order aOrder, int index) { while(true) try{ return realObject.addOrderAtImpl(aOrder,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveOrderAt(Order aOrder, int index) { while(true) try{ return realObject.addOrMoveOrderAtImpl(aOrder,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean setSystemManager(SystemManager aSystemManager) { while(true) try{ return realObject.setSystemManagerImpl(aSystemManager); } catch(Exception e) {System.err.println(e.toString());} } public void delete() { while(true) try{ realObject.deleteImpl(); break; } catch(Exception e) {System.err.println(e.toString());} } public Order orderProduct(String productType, String vendorName) { while(true) try{ return realObject.orderProductImpl(productType,vendorName); } catch(Exception e) {System.err.println(e.toString());} } public String remoteUrl; public String objectId; public String remotePort; private static Customer umplenewInstance() { return new Customer((UmpleRuntime.UmpleNode)null); } protected Customer (UmpleRuntime.UmpleNode node) { } public void setRealObject(ICustomerImpl aObject) { realObject=aObject; } void afterUnmarshal(Unmarshaller u, Object parent) { initializeConnection(); } private void initializeConnection() { if(objectId.contains(Customer.class.getName())) { boolean success = false; while (!success) { try { URL url = new URL(remoteUrl+":"+remotePort+"/Customer"+objectId+"?wsdl"); QName qname = new QName("https://ecommerceWS/","CustomerService"); Service service = Service.create(url, qname); setRealObject(service.getPort(ICustomerImpl.class)); success = true; } catch (Exception e) { System.err.println("Client exception: " + e.toString()); e.printStackTrace(); try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } } } } public boolean equals(Object obj) { if(obj.getClass()!=this.getClass()) return false; return (getHashCode()==((Customer)obj).getHashCode()); } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package distributed.rmi4; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; import java.io.Serializable; import java.rmi.RemoteException; import java.io.Serializable; import distributed.rmi4.UmpleRuntime; public class Microwave extends CC implements java.io.Serializable { public void setRealObject(IMicrowaveImpl aObject) { super.setRealObject(aObject); realObject=aObject; } IMicrowaveImpl realObject; public Microwave(UmpleRuntime.UmpleComponent component) { if(this.getClass()== Microwave.class) setRealObject(UmpleRuntime.getInstance().newMicrowave(component, this)); } public Microwave() { if(this.getClass()== Microwave.class) setRealObject(UmpleRuntime.getInstance().newMicrowave(this)); } public void setSelf(Microwave proxy) { while(true) try{ realObject.setSelf(proxy); break; } catch(Exception e) {System.err.println(e.toString());} } public int getHashCode() { while(true) try{ return realObject.getHashCode(); } catch(Exception e) {System.err.println(e.toString());} } public void delete() { while(true) try{ realObject.delete(); break; } catch(Exception e) {System.err.println(e.toString());} } public int method1(int f) { while(true) try{ return realObject.method1(f); } catch(Exception e) {System.err.println(e.toString());} } public boolean equals(Object obj) { if(obj.getClass()!=this.getClass()) return false; return (getHashCode()==((Microwave)obj).getHashCode()); } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceRMI0; import java.util.*; import java.io.Serializable; import java.rmi.registry.Registry; import java.rmi.registry.LocateRegistry; import java.rmi.server.UnicastRemoteObject; public class CustomerRemote implements ICustomerImpl { Customer realObject; public void setRealObject(Customer aObject) { realObject=aObject; } public CustomerRemote() {} public CustomerRemote(Customer aObject) { realObject=aObject; } public int getHashCodeImpl() { while(true) try{ return realObject.getHashCodeImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean setNameImpl(String aName) { while(true) try{ return realObject.setNameImpl(aName); } catch(Exception e) {System.err.println(e.toString());} } public String getNameImpl() { while(true) try{ return realObject.getNameImpl(); } catch(Exception e) {System.err.println(e.toString());} } public Vendor getVendorImpl(int index) { while(true) try{ return realObject.getVendorImpl(index); } catch(Exception e) {System.err.println(e.toString());} } public List<Vendor> getVendorsImpl() { while(true) try{ return realObject.getVendorsImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfVendorsImpl() { while(true) try{ return realObject.numberOfVendorsImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasVendorsImpl() { while(true) try{ return realObject.hasVendorsImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfVendorImpl(Vendor aVendor) { while(true) try{ return realObject.indexOfVendorImpl(aVendor); } catch(Exception e) {System.err.println(e.toString());} } public Order getOrderImpl(int index) { while(true) try{ return realObject.getOrderImpl(index); } catch(Exception e) {System.err.println(e.toString());} } public List<Order> getOrdersImpl() { while(true) try{ return realObject.getOrdersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfOrdersImpl() { while(true) try{ return realObject.numberOfOrdersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasOrdersImpl() { while(true) try{ return realObject.hasOrdersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfOrderImpl(Order aOrder) { while(true) try{ return realObject.indexOfOrderImpl(aOrder); } catch(Exception e) {System.err.println(e.toString());} } public SystemManager getSystemManagerImpl() { while(true) try{ return realObject.getSystemManagerImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasSystemManagerImpl() { while(true) try{ return realObject.hasSystemManagerImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean addVendorImpl(Vendor aVendor) { while(true) try{ return realObject.addVendorImpl(aVendor); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeVendorImpl(Vendor aVendor) { while(true) try{ return realObject.removeVendorImpl(aVendor); } catch(Exception e) {System.err.println(e.toString());} } public boolean addVendorAtImpl(Vendor aVendor, int index) { while(true) try{ return realObject.addVendorAtImpl(aVendor,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveVendorAtImpl(Vendor aVendor, int index) { while(true) try{ return realObject.addOrMoveVendorAtImpl(aVendor,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrderImpl(Order aOrder) { while(true) try{ return realObject.addOrderImpl(aOrder); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeOrderImpl(Order aOrder) { while(true) try{ return realObject.removeOrderImpl(aOrder); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrderAtImpl(Order aOrder, int index) { while(true) try{ return realObject.addOrderAtImpl(aOrder,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveOrderAtImpl(Order aOrder, int index) { while(true) try{ return realObject.addOrMoveOrderAtImpl(aOrder,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean setSystemManagerImpl(SystemManager aSystemManager) { while(true) try{ return realObject.setSystemManagerImpl(aSystemManager); } catch(Exception e) {System.err.println(e.toString());} } public void deleteImpl() { while(true) try{ realObject.deleteImpl(); break; } catch(Exception e) {System.err.println(e.toString());} } public Order orderProductImpl(String productType, String vendorName) { while(true) try{ return realObject.orderProductImpl(productType,vendorName); } catch(Exception e) {System.err.println(e.toString());} } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package distributed.rmi2; import java.io.Serializable; import java.rmi.RemoteException; public interface IClientImpl extends java.rmi.Remote, ICCImpl { public void setSelf(Client proxy) throws RemoteException; public int getHashCode() throws RemoteException; public void delete() throws RemoteException; } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceRMI1; import java.util.*; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; import java.rmi.RemoteException; import java.io.Serializable; import ecommerceRMI1.UmpleRuntime; public class Customer implements java.io.Serializable { public void setRealObject(ICustomerImpl aObject) { realObject=aObject; } ICustomerImpl realObject; public Customer(String aName, UmpleRuntime.UmpleComponent component) { if(this.getClass()== Customer.class) setRealObject(UmpleRuntime.getInstance().newCustomer(aName, component, this)); } public Customer(String aName) { if(this.getClass()== Customer.class) setRealObject(UmpleRuntime.getInstance().newCustomer(aName, this)); } public void setSelf(Customer proxy) { while(true) try{ realObject.setSelf(proxy); break; } catch(Exception e) {System.err.println(e.toString());} } public int getHashCode() { while(true) try{ return realObject.getHashCode(); } catch(Exception e) {System.err.println(e.toString());} } public boolean setName(String aName) { while(true) try{ return realObject.setName(aName); } catch(Exception e) {System.err.println(e.toString());} } public String getName() { while(true) try{ return realObject.getName(); } catch(Exception e) {System.err.println(e.toString());} } public Vendor getVendor(int index) { while(true) try{ return realObject.getVendor(index); } catch(Exception e) {System.err.println(e.toString());} } public List<Vendor> getVendors() { while(true) try{ return realObject.getVendors(); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfVendors() { while(true) try{ return realObject.numberOfVendors(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasVendors() { while(true) try{ return realObject.hasVendors(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfVendor(Vendor aVendor) { while(true) try{ return realObject.indexOfVendor(aVendor); } catch(Exception e) {System.err.println(e.toString());} } public Order getOrder(int index) { while(true) try{ return realObject.getOrder(index); } catch(Exception e) {System.err.println(e.toString());} } public List<Order> getOrders() { while(true) try{ return realObject.getOrders(); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfOrders() { while(true) try{ return realObject.numberOfOrders(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasOrders() { while(true) try{ return realObject.hasOrders(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfOrder(Order aOrder) { while(true) try{ return realObject.indexOfOrder(aOrder); } catch(Exception e) {System.err.println(e.toString());} } public SystemManager getSystemManager() { while(true) try{ return realObject.getSystemManager(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasSystemManager() { while(true) try{ return realObject.hasSystemManager(); } catch(Exception e) {System.err.println(e.toString());} } public static int minimumNumberOfVendors() { while(true) try{ return CustomerImpl.minimumNumberOfVendors(); } catch(Exception e) {System.err.println(e.toString());} } public boolean addVendor(Vendor aVendor) { while(true) try{ return realObject.addVendor(aVendor); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeVendor(Vendor aVendor) { while(true) try{ return realObject.removeVendor(aVendor); } catch(Exception e) {System.err.println(e.toString());} } public boolean addVendorAt(Vendor aVendor, int index) { while(true) try{ return realObject.addVendorAt(aVendor,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveVendorAt(Vendor aVendor, int index) { while(true) try{ return realObject.addOrMoveVendorAt(aVendor,index); } catch(Exception e) {System.err.println(e.toString());} } public static int minimumNumberOfOrders() { while(true) try{ return CustomerImpl.minimumNumberOfOrders(); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrder(Order aOrder) { while(true) try{ return realObject.addOrder(aOrder); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeOrder(Order aOrder) { while(true) try{ return realObject.removeOrder(aOrder); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrderAt(Order aOrder, int index) { while(true) try{ return realObject.addOrderAt(aOrder,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveOrderAt(Order aOrder, int index) { while(true) try{ return realObject.addOrMoveOrderAt(aOrder,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean setSystemManager(SystemManager aSystemManager) { while(true) try{ return realObject.setSystemManager(aSystemManager); } catch(Exception e) {System.err.println(e.toString());} } public void delete() { while(true) try{ realObject.delete(); break; } catch(Exception e) {System.err.println(e.toString());} } public Order orderProduct(String productType, String vendorName) { while(true) try{ return realObject.orderProduct(productType,vendorName); } catch(Exception e) {System.err.println(e.toString());} } public boolean equals(Object obj) { if(obj.getClass()!=this.getClass()) return false; return (getHashCode()==((Customer)obj).getHashCode()); } protected Customer(){} } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceRMI0; import java.util.*; import java.io.Serializable; // line 100 "../ecommerceRMI0.ump" public class Customer implements java.io.Serializable, ICustomerImpl { //------------------------ // MEMBER VARIABLES //------------------------ //Customer Attributes private transient String name; //Customer Associations private transient List<Vendor> vendors; private transient List<Order> orders; private transient SystemManager systemManager; //------------------------ // CONSTRUCTOR //------------------------ public Customer(String aName, UmpleRuntime.UmpleComponent umpleComponent) { if(umpleComponent.getNode().getId()!=UmpleRuntime.getThisNodeId()) { if(this.getClass()== Customer.class) UmpleRuntime.getInstance().newCustomer(aName, umpleComponent, this); return; } else { UmpleRuntime.getInstance().newCustomer(this); } name = aName; vendors = new ArrayList<Vendor>(); orders = new ArrayList<Order>(); } //------------------------ // Returning the Hashcode //------------------------ public int getHashCodeImpl() { return hashCode(); } //------------------------ // INTERFACE //------------------------ public boolean setNameImpl(String aName) { boolean wasSet = false; name = aName; wasSet = true; return wasSet; } public String getNameImpl() { return name; } /* Code from template association_GetMany */ public Vendor getVendorImpl(int index) { Vendor aVendor = vendors.get(index); return aVendor; } public List<Vendor> getVendorsImpl() { List<Vendor> newVendors = Collections.unmodifiableList(vendors); return newVendors; } public int numberOfVendorsImpl() { int number = vendors.size(); return number; } public boolean hasVendorsImpl() { boolean has = vendors.size() > 0; return has; } public int indexOfVendorImpl(Vendor aVendor) { int index = vendors.indexOf(aVendor); return index; } /* Code from template association_GetMany */ public Order getOrderImpl(int index) { Order aOrder = orders.get(index); return aOrder; } public List<Order> getOrdersImpl() { List<Order> newOrders = Collections.unmodifiableList(orders); return newOrders; } public int numberOfOrdersImpl() { int number = orders.size(); return number; } public boolean hasOrdersImpl() { boolean has = orders.size() > 0; return has; } public int indexOfOrderImpl(Order aOrder) { int index = orders.indexOf(aOrder); return index; } /* Code from template association_GetOne */ public SystemManager getSystemManagerImpl() { return systemManager; } public boolean hasSystemManagerImpl() { boolean has = systemManager != null; return has; } /* Code from template association_MinimumNumberOfMethod */ public static int minimumNumberOfVendors() { return 0; } /* Code from template association_AddManyToManyMethod */ public boolean addVendorImpl(Vendor aVendor) { boolean wasAdded = false; if (vendors.contains(aVendor)) { return false; } vendors.add(aVendor); if (aVendor.indexOfCustomer(this) != -1) { wasAdded = true; } else { wasAdded = aVendor.addCustomer(this); if (!wasAdded) { vendors.remove(aVendor); } } return wasAdded; } /* Code from template association_RemoveMany */ public boolean removeVendorImpl(Vendor aVendor) { boolean wasRemoved = false; if (!vendors.contains(aVendor)) { return wasRemoved; } int oldIndex = vendors.indexOf(aVendor); vendors.remove(oldIndex); if (aVendor.indexOfCustomer(this) == -1) { wasRemoved = true; } else { wasRemoved = aVendor.removeCustomer(this); if (!wasRemoved) { vendors.add(oldIndex,aVendor); } } return wasRemoved; } /* Code from template association_AddIndexControlFunctions */ public boolean addVendorAtImpl(Vendor aVendor, int index) { boolean wasAdded = false; if(addVendor(aVendor)) { if(index < 0 ) { index = 0; } if(index > numberOfVendors()) { index = numberOfVendors() - 1; } vendors.remove(aVendor); vendors.add(index, aVendor); wasAdded = true; } return wasAdded; } public boolean addOrMoveVendorAtImpl(Vendor aVendor, int index) { boolean wasAdded = false; if(vendors.contains(aVendor)) { if(index < 0 ) { index = 0; } if(index > numberOfVendors()) { index = numberOfVendors() - 1; } vendors.remove(aVendor); vendors.add(index, aVendor); wasAdded = true; } else { wasAdded = addVendorAt(aVendor, index); } return wasAdded; } /* Code from template association_MinimumNumberOfMethod */ public static int minimumNumberOfOrders() { return 0; } /* Code from template association_AddManyToOptionalOne */ public boolean addOrderImpl(Order aOrder) { boolean wasAdded = false; if (orders.contains(aOrder)) { return false; } Customer existingCustomer = aOrder.getCustomer(); if (existingCustomer == null) { aOrder.setCustomer(this); } else if (!this.equals(existingCustomer)) { existingCustomer.removeOrder(aOrder); addOrder(aOrder); } else { orders.add(aOrder); } wasAdded = true; return wasAdded; } public boolean removeOrderImpl(Order aOrder) { boolean wasRemoved = false; if (orders.contains(aOrder)) { orders.remove(aOrder); aOrder.setCustomer(null); wasRemoved = true; } return wasRemoved; } /* Code from template association_AddIndexControlFunctions */ public boolean addOrderAtImpl(Order aOrder, int index) { boolean wasAdded = false; if(addOrder(aOrder)) { if(index < 0 ) { index = 0; } if(index > numberOfOrders()) { index = numberOfOrders() - 1; } orders.remove(aOrder); orders.add(index, aOrder); wasAdded = true; } return wasAdded; } public boolean addOrMoveOrderAtImpl(Order aOrder, int index) { boolean wasAdded = false; if(orders.contains(aOrder)) { if(index < 0 ) { index = 0; } if(index > numberOfOrders()) { index = numberOfOrders() - 1; } orders.remove(aOrder); orders.add(index, aOrder); wasAdded = true; } else { wasAdded = addOrderAt(aOrder, index); } return wasAdded; } /* Code from template association_SetOptionalOneToMany */ public boolean setSystemManagerImpl(SystemManager aSystemManager) { boolean wasSet = false; SystemManager existingSystemManager = systemManager; systemManager = aSystemManager; if (existingSystemManager != null && !existingSystemManager.equals(aSystemManager)) { existingSystemManager.removeCustomer(this); } if (aSystemManager != null) { aSystemManager.addCustomer(this); } wasSet = true; return wasSet; } public void deleteImpl() { ArrayList<Vendor> copyOfVendors = new ArrayList<Vendor>(vendors); vendors.clear(); for(Vendor aVendor : copyOfVendors) { aVendor.removeCustomer(this); } while( !orders.isEmpty() ) { orders.get(0).setCustomer(null); } if (systemManager != null) { SystemManager placeholderSystemManager = systemManager; this.systemManager = null; placeholderSystemManager.removeCustomer(this); } } // line 106 "../ecommerceRMI0.ump" public Order orderProductImpl(String productType, String vendorName){ for(Vendor v: getVendors()) { if(v.getName().equals(vendorName)) return v.makeOrder(this,v.findProduct(new ProductType(productType))); } return null; } public String toString() { return super.toString() + "["+ "name" + ":" + getName()+ "]" + System.getProperties().getProperty("line.separator") + " " + "systemManager = "+(getSystemManager()!=null?Integer.toHexString(System.identityHashCode(getSystemManager())):"null"); } public void setRealObject(ICustomerImpl aObject) { realObject=aObject; } transient ICustomerImpl realObject=this; public Customer(String aName) { this(aName,UmpleRuntime.getComponent("Customer")); } public int getHashCode() { while(true) try{ return realObject.getHashCodeImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean setName(String aName) { while(true) try{ return realObject.setNameImpl(aName); } catch(Exception e) {System.err.println(e.toString());} } public String getName() { while(true) try{ return realObject.getNameImpl(); } catch(Exception e) {System.err.println(e.toString());} } public Vendor getVendor(int index) { while(true) try{ return realObject.getVendorImpl(index); } catch(Exception e) {System.err.println(e.toString());} } public List<Vendor> getVendors() { while(true) try{ return realObject.getVendorsImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfVendors() { while(true) try{ return realObject.numberOfVendorsImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasVendors() { while(true) try{ return realObject.hasVendorsImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfVendor(Vendor aVendor) { while(true) try{ return realObject.indexOfVendorImpl(aVendor); } catch(Exception e) {System.err.println(e.toString());} } public Order getOrder(int index) { while(true) try{ return realObject.getOrderImpl(index); } catch(Exception e) {System.err.println(e.toString());} } public List<Order> getOrders() { while(true) try{ return realObject.getOrdersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfOrders() { while(true) try{ return realObject.numberOfOrdersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasOrders() { while(true) try{ return realObject.hasOrdersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfOrder(Order aOrder) { while(true) try{ return realObject.indexOfOrderImpl(aOrder); } catch(Exception e) {System.err.println(e.toString());} } public SystemManager getSystemManager() { while(true) try{ return realObject.getSystemManagerImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasSystemManager() { while(true) try{ return realObject.hasSystemManagerImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean addVendor(Vendor aVendor) { while(true) try{ return realObject.addVendorImpl(aVendor); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeVendor(Vendor aVendor) { while(true) try{ return realObject.removeVendorImpl(aVendor); } catch(Exception e) {System.err.println(e.toString());} } public boolean addVendorAt(Vendor aVendor, int index) { while(true) try{ return realObject.addVendorAtImpl(aVendor,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveVendorAt(Vendor aVendor, int index) { while(true) try{ return realObject.addOrMoveVendorAtImpl(aVendor,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrder(Order aOrder) { while(true) try{ return realObject.addOrderImpl(aOrder); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeOrder(Order aOrder) { while(true) try{ return realObject.removeOrderImpl(aOrder); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrderAt(Order aOrder, int index) { while(true) try{ return realObject.addOrderAtImpl(aOrder,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveOrderAt(Order aOrder, int index) { while(true) try{ return realObject.addOrMoveOrderAtImpl(aOrder,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean setSystemManager(SystemManager aSystemManager) { while(true) try{ return realObject.setSystemManagerImpl(aSystemManager); } catch(Exception e) {System.err.println(e.toString());} } public void delete() { while(true) try{ realObject.deleteImpl(); break; } catch(Exception e) {System.err.println(e.toString());} } public Order orderProduct(String productType, String vendorName) { while(true) try{ return realObject.orderProductImpl(productType,vendorName); } catch(Exception e) {System.err.println(e.toString());} } protected ICustomerImpl remoteObject; public void setRemoteObject(ICustomerImpl aRemoteObject) { remoteObject=aRemoteObject; } public ICustomerImpl getRemoteObject() { return (ICustomerImpl)remoteObject; } private void readObject(java.io.ObjectInputStream in) throws Exception { try { in.defaultReadObject(); realObject=(ICustomerImpl)remoteObject; } catch(Exception e) { throw e; } } public boolean equals(Object obj) { if(obj.getClass()!=this.getClass()) return false; return (getHashCode()==((Customer)obj).getHashCode()); } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package distributed.rmi4; import java.io.Serializable; import java.rmi.RemoteException; public interface ICCImpl extends java.rmi.Remote, IFatherImpl { public void delete() throws RemoteException; public void someMethod1() throws RemoteException; } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceRMI0; import java.util.*; import java.io.Serializable; import java.rmi.registry.Registry; import java.rmi.registry.LocateRegistry; import java.rmi.server.UnicastRemoteObject; public class SystemManagerRemote implements ISystemManagerImpl { SystemManager realObject; public void setRealObject(SystemManager aObject) { realObject=aObject; } public SystemManagerRemote() {} public SystemManagerRemote(SystemManager aObject) { realObject=aObject; } public int getHashCodeImpl() { while(true) try{ return realObject.getHashCodeImpl(); } catch(Exception e) {System.err.println(e.toString());} } public Agent getAgentImpl(int index) { while(true) try{ return realObject.getAgentImpl(index); } catch(Exception e) {System.err.println(e.toString());} } public List<Agent> getAgentsImpl() { while(true) try{ return realObject.getAgentsImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfAgentsImpl() { while(true) try{ return realObject.numberOfAgentsImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasAgentsImpl() { while(true) try{ return realObject.hasAgentsImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfAgentImpl(Agent aAgent) { while(true) try{ return realObject.indexOfAgentImpl(aAgent); } catch(Exception e) {System.err.println(e.toString());} } public Warehouse getWarehousImpl(int index) { while(true) try{ return realObject.getWarehousImpl(index); } catch(Exception e) {System.err.println(e.toString());} } public List<Warehouse> getWarehousesImpl() { while(true) try{ return realObject.getWarehousesImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfWarehousesImpl() { while(true) try{ return realObject.numberOfWarehousesImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasWarehousesImpl() { while(true) try{ return realObject.hasWarehousesImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfWarehousImpl(Warehouse aWarehous) { while(true) try{ return realObject.indexOfWarehousImpl(aWarehous); } catch(Exception e) {System.err.println(e.toString());} } public Customer getCustomerImpl(int index) { while(true) try{ return realObject.getCustomerImpl(index); } catch(Exception e) {System.err.println(e.toString());} } public List<Customer> getCustomersImpl() { while(true) try{ return realObject.getCustomersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfCustomersImpl() { while(true) try{ return realObject.numberOfCustomersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasCustomersImpl() { while(true) try{ return realObject.hasCustomersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfCustomerImpl(Customer aCustomer) { while(true) try{ return realObject.indexOfCustomerImpl(aCustomer); } catch(Exception e) {System.err.println(e.toString());} } public Order getOrderImpl(int index) { while(true) try{ return realObject.getOrderImpl(index); } catch(Exception e) {System.err.println(e.toString());} } public List<Order> getOrdersImpl() { while(true) try{ return realObject.getOrdersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfOrdersImpl() { while(true) try{ return realObject.numberOfOrdersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasOrdersImpl() { while(true) try{ return realObject.hasOrdersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfOrderImpl(Order aOrder) { while(true) try{ return realObject.indexOfOrderImpl(aOrder); } catch(Exception e) {System.err.println(e.toString());} } public boolean addAgentImpl(Agent aAgent) { while(true) try{ return realObject.addAgentImpl(aAgent); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeAgentImpl(Agent aAgent) { while(true) try{ return realObject.removeAgentImpl(aAgent); } catch(Exception e) {System.err.println(e.toString());} } public boolean addAgentAtImpl(Agent aAgent, int index) { while(true) try{ return realObject.addAgentAtImpl(aAgent,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveAgentAtImpl(Agent aAgent, int index) { while(true) try{ return realObject.addOrMoveAgentAtImpl(aAgent,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addWarehousImpl(Warehouse aWarehous) { while(true) try{ return realObject.addWarehousImpl(aWarehous); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeWarehousImpl(Warehouse aWarehous) { while(true) try{ return realObject.removeWarehousImpl(aWarehous); } catch(Exception e) {System.err.println(e.toString());} } public boolean addWarehousAtImpl(Warehouse aWarehous, int index) { while(true) try{ return realObject.addWarehousAtImpl(aWarehous,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveWarehousAtImpl(Warehouse aWarehous, int index) { while(true) try{ return realObject.addOrMoveWarehousAtImpl(aWarehous,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addCustomerImpl(Customer aCustomer) { while(true) try{ return realObject.addCustomerImpl(aCustomer); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeCustomerImpl(Customer aCustomer) { while(true) try{ return realObject.removeCustomerImpl(aCustomer); } catch(Exception e) {System.err.println(e.toString());} } public boolean addCustomerAtImpl(Customer aCustomer, int index) { while(true) try{ return realObject.addCustomerAtImpl(aCustomer,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveCustomerAtImpl(Customer aCustomer, int index) { while(true) try{ return realObject.addOrMoveCustomerAtImpl(aCustomer,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrderImpl(Order aOrder) { while(true) try{ return realObject.addOrderImpl(aOrder); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeOrderImpl(Order aOrder) { while(true) try{ return realObject.removeOrderImpl(aOrder); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrderAtImpl(Order aOrder, int index) { while(true) try{ return realObject.addOrderAtImpl(aOrder,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveOrderAtImpl(Order aOrder, int index) { while(true) try{ return realObject.addOrMoveOrderAtImpl(aOrder,index); } catch(Exception e) {System.err.println(e.toString());} } public void deleteImpl() { while(true) try{ realObject.deleteImpl(); break; } catch(Exception e) {System.err.println(e.toString());} } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceRMI0; import java.util.*; import java.io.Serializable; // line 60 "../ecommerceRMI0.ump" public class Vendor extends Agent implements java.io.Serializable, IVendorImpl { //------------------------ // MEMBER VARIABLES //------------------------ //Vendor Associations private transient List<Order> orders; private transient List<Customer> customers; //------------------------ // CONSTRUCTOR //------------------------ public Vendor(String aName, UmpleRuntime.UmpleComponent umpleComponent) { super(aName,umpleComponent); if(umpleComponent.getNode().getId()!=UmpleRuntime.getThisNodeId()) { if(this.getClass()== Vendor.class) UmpleRuntime.getInstance().newVendor(aName, umpleComponent, this); return; } orders = new ArrayList<Order>(); customers = new ArrayList<Customer>(); } //------------------------ // Returning the Hashcode //------------------------ public int getHashCodeImpl() { return hashCode(); } //------------------------ // INTERFACE //------------------------ /* Code from template association_GetMany */ public Order getOrderImpl(int index) { Order aOrder = orders.get(index); return aOrder; } public List<Order> getOrdersImpl() { List<Order> newOrders = Collections.unmodifiableList(orders); return newOrders; } public int numberOfOrdersImpl() { int number = orders.size(); return number; } public boolean hasOrdersImpl() { boolean has = orders.size() > 0; return has; } public int indexOfOrderImpl(Order aOrder) { int index = orders.indexOf(aOrder); return index; } /* Code from template association_GetMany */ public Customer getCustomerImpl(int index) { Customer aCustomer = customers.get(index); return aCustomer; } public List<Customer> getCustomersImpl() { List<Customer> newCustomers = Collections.unmodifiableList(customers); return newCustomers; } public int numberOfCustomersImpl() { int number = customers.size(); return number; } public boolean hasCustomersImpl() { boolean has = customers.size() > 0; return has; } public int indexOfCustomerImpl(Customer aCustomer) { int index = customers.indexOf(aCustomer); return index; } /* Code from template association_MinimumNumberOfMethod */ public static int minimumNumberOfOrders() { return 0; } /* Code from template association_AddManyToOptionalOne */ public boolean addOrderImpl(Order aOrder) { boolean wasAdded = false; if (orders.contains(aOrder)) { return false; } Vendor existingVendor = aOrder.getVendor(); if (existingVendor == null) { aOrder.setVendor(this); } else if (!this.equals(existingVendor)) { existingVendor.removeOrder(aOrder); addOrder(aOrder); } else { orders.add(aOrder); } wasAdded = true; return wasAdded; } public boolean removeOrderImpl(Order aOrder) { boolean wasRemoved = false; if (orders.contains(aOrder)) { orders.remove(aOrder); aOrder.setVendor(null); wasRemoved = true; } return wasRemoved; } /* Code from template association_AddIndexControlFunctions */ public boolean addOrderAtImpl(Order aOrder, int index) { boolean wasAdded = false; if(addOrder(aOrder)) { if(index < 0 ) { index = 0; } if(index > numberOfOrders()) { index = numberOfOrders() - 1; } orders.remove(aOrder); orders.add(index, aOrder); wasAdded = true; } return wasAdded; } public boolean addOrMoveOrderAtImpl(Order aOrder, int index) { boolean wasAdded = false; if(orders.contains(aOrder)) { if(index < 0 ) { index = 0; } if(index > numberOfOrders()) { index = numberOfOrders() - 1; } orders.remove(aOrder); orders.add(index, aOrder); wasAdded = true; } else { wasAdded = addOrderAt(aOrder, index); } return wasAdded; } /* Code from template association_MinimumNumberOfMethod */ public static int minimumNumberOfCustomers() { return 0; } /* Code from template association_AddManyToManyMethod */ public boolean addCustomerImpl(Customer aCustomer) { boolean wasAdded = false; if (customers.contains(aCustomer)) { return false; } customers.add(aCustomer); if (aCustomer.indexOfVendor(this) != -1) { wasAdded = true; } else { wasAdded = aCustomer.addVendor(this); if (!wasAdded) { customers.remove(aCustomer); } } return wasAdded; } /* Code from template association_RemoveMany */ public boolean removeCustomerImpl(Customer aCustomer) { boolean wasRemoved = false; if (!customers.contains(aCustomer)) { return wasRemoved; } int oldIndex = customers.indexOf(aCustomer); customers.remove(oldIndex); if (aCustomer.indexOfVendor(this) == -1) { wasRemoved = true; } else { wasRemoved = aCustomer.removeVendor(this); if (!wasRemoved) { customers.add(oldIndex,aCustomer); } } return wasRemoved; } /* Code from template association_AddIndexControlFunctions */ public boolean addCustomerAtImpl(Customer aCustomer, int index) { boolean wasAdded = false; if(addCustomer(aCustomer)) { if(index < 0 ) { index = 0; } if(index > numberOfCustomers()) { index = numberOfCustomers() - 1; } customers.remove(aCustomer); customers.add(index, aCustomer); wasAdded = true; } return wasAdded; } public boolean addOrMoveCustomerAtImpl(Customer aCustomer, int index) { boolean wasAdded = false; if(customers.contains(aCustomer)) { if(index < 0 ) { index = 0; } if(index > numberOfCustomers()) { index = numberOfCustomers() - 1; } customers.remove(aCustomer); customers.add(index, aCustomer); wasAdded = true; } else { wasAdded = addCustomerAt(aCustomer, index); } return wasAdded; } public void deleteImpl() { while( !orders.isEmpty() ) { orders.get(0).setVendor(null); } ArrayList<Customer> copyOfCustomers = new ArrayList<Customer>(customers); customers.clear(); for(Customer aCustomer : copyOfCustomers) { aCustomer.removeVendor(this); } super.delete(); } // line 64 "../ecommerceRMI0.ump" public Product findProductImpl(ProductType productType){ for(Warehouse w:getWarehouses()) { Product p= w.findProduct(productType); if(p!=null) return p; } return null; } // line 73 "../ecommerceRMI0.ump" public Order makeOrderImpl(Customer aCustomer, Product aProduct){ if(aProduct==null) return null; Order aOrder= new Order(aProduct); aOrder.setCustomer(aCustomer); aOrder.setVendor(this); return aOrder; } public void setRealObject(IVendorImpl aObject) { super.setRealObject(aObject); realObject=aObject; } transient IVendorImpl realObject=this; public Vendor(String aName) { this(aName,UmpleRuntime.getComponent("Vendor")); } public int getHashCode() { while(true) try{ return realObject.getHashCodeImpl(); } catch(Exception e) {System.err.println(e.toString());} } public Order getOrder(int index) { while(true) try{ return realObject.getOrderImpl(index); } catch(Exception e) {System.err.println(e.toString());} } public List<Order> getOrders() { while(true) try{ return realObject.getOrdersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfOrders() { while(true) try{ return realObject.numberOfOrdersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasOrders() { while(true) try{ return realObject.hasOrdersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfOrder(Order aOrder) { while(true) try{ return realObject.indexOfOrderImpl(aOrder); } catch(Exception e) {System.err.println(e.toString());} } public Customer getCustomer(int index) { while(true) try{ return realObject.getCustomerImpl(index); } catch(Exception e) {System.err.println(e.toString());} } public List<Customer> getCustomers() { while(true) try{ return realObject.getCustomersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfCustomers() { while(true) try{ return realObject.numberOfCustomersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasCustomers() { while(true) try{ return realObject.hasCustomersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfCustomer(Customer aCustomer) { while(true) try{ return realObject.indexOfCustomerImpl(aCustomer); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrder(Order aOrder) { while(true) try{ return realObject.addOrderImpl(aOrder); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeOrder(Order aOrder) { while(true) try{ return realObject.removeOrderImpl(aOrder); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrderAt(Order aOrder, int index) { while(true) try{ return realObject.addOrderAtImpl(aOrder,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveOrderAt(Order aOrder, int index) { while(true) try{ return realObject.addOrMoveOrderAtImpl(aOrder,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addCustomer(Customer aCustomer) { while(true) try{ return realObject.addCustomerImpl(aCustomer); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeCustomer(Customer aCustomer) { while(true) try{ return realObject.removeCustomerImpl(aCustomer); } catch(Exception e) {System.err.println(e.toString());} } public boolean addCustomerAt(Customer aCustomer, int index) { while(true) try{ return realObject.addCustomerAtImpl(aCustomer,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveCustomerAt(Customer aCustomer, int index) { while(true) try{ return realObject.addOrMoveCustomerAtImpl(aCustomer,index); } catch(Exception e) {System.err.println(e.toString());} } public void delete() { while(true) try{ realObject.deleteImpl(); break; } catch(Exception e) {System.err.println(e.toString());} } public Product findProduct(ProductType productType) { while(true) try{ return realObject.findProductImpl(productType); } catch(Exception e) {System.err.println(e.toString());} } public Order makeOrder(Customer aCustomer, Product aProduct) { while(true) try{ return realObject.makeOrderImpl(aCustomer,aProduct); } catch(Exception e) {System.err.println(e.toString());} } public void setRemoteObject(IVendorImpl aRemoteObject) { remoteObject=aRemoteObject; } public IVendorImpl getRemoteObject() { return (IVendorImpl)remoteObject; } private void readObject(java.io.ObjectInputStream in) throws Exception { try { in.defaultReadObject(); realObject=(IVendorImpl)remoteObject; } catch(Exception e) { throw e; } } public boolean equals(Object obj) { if(obj.getClass()!=this.getClass()) return false; return (getHashCode()==((Vendor)obj).getHashCode()); } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceRMI1; import java.util.*; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; import java.rmi.RemoteException; public interface ISystemManagerImpl extends java.rmi.Remote { public void setSelf(SystemManager proxy) throws RemoteException; public int getHashCode() throws RemoteException; public Agent getAgent(int index) throws RemoteException; public List<Agent> getAgents() throws RemoteException; public int numberOfAgents() throws RemoteException; public boolean hasAgents() throws RemoteException; public int indexOfAgent(Agent aAgent) throws RemoteException; public Warehouse getWarehous(int index) throws RemoteException; public List<Warehouse> getWarehouses() throws RemoteException; public int numberOfWarehouses() throws RemoteException; public boolean hasWarehouses() throws RemoteException; public int indexOfWarehous(Warehouse aWarehous) throws RemoteException; public Customer getCustomer(int index) throws RemoteException; public List<Customer> getCustomers() throws RemoteException; public int numberOfCustomers() throws RemoteException; public boolean hasCustomers() throws RemoteException; public int indexOfCustomer(Customer aCustomer) throws RemoteException; public Order getOrder(int index) throws RemoteException; public List<Order> getOrders() throws RemoteException; public int numberOfOrders() throws RemoteException; public boolean hasOrders() throws RemoteException; public int indexOfOrder(Order aOrder) throws RemoteException; public boolean addAgent(Agent aAgent) throws RemoteException; public boolean removeAgent(Agent aAgent) throws RemoteException; public boolean addAgentAt(Agent aAgent, int index) throws RemoteException; public boolean addOrMoveAgentAt(Agent aAgent, int index) throws RemoteException; public boolean addWarehous(Warehouse aWarehous) throws RemoteException; public boolean removeWarehous(Warehouse aWarehous) throws RemoteException; public boolean addWarehousAt(Warehouse aWarehous, int index) throws RemoteException; public boolean addOrMoveWarehousAt(Warehouse aWarehous, int index) throws RemoteException; public boolean addCustomer(Customer aCustomer) throws RemoteException; public boolean removeCustomer(Customer aCustomer) throws RemoteException; public boolean addCustomerAt(Customer aCustomer, int index) throws RemoteException; public boolean addOrMoveCustomerAt(Customer aCustomer, int index) throws RemoteException; public boolean addOrder(Order aOrder) throws RemoteException; public boolean removeOrder(Order aOrder) throws RemoteException; public boolean addOrderAt(Order aOrder, int index) throws RemoteException; public boolean addOrMoveOrderAt(Order aOrder, int index) throws RemoteException; public void delete() throws RemoteException; } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceWS; import java.util.*; import java.io.Serializable; import javax.xml.namespace.QName; import java.net.URL; import javax.xml.ws.Service; import javax.xml.ws.Endpoint; import javax.jws.WebService; import javax.xml.bind.Unmarshaller; import javax.xml.bind.annotation.*; import javax.jws.WebMethod; import javax.jws.WebService; import javax.jws.soap.SOAPBinding; import javax.jws.soap.SOAPBinding.Style; import java.rmi.RemoteException; @WebService @SOAPBinding(style = Style.RPC) public interface ISystemManagerImpl { @WebMethod public int getHashCodeImpl(); @WebMethod public Agent getAgentImpl(int index); @WebMethod public int numberOfAgentsImpl(); @WebMethod public boolean hasAgentsImpl(); @WebMethod public int indexOfAgentImpl(Agent aAgent); @WebMethod public Warehouse getWarehousImpl(int index); @WebMethod public int numberOfWarehousesImpl(); @WebMethod public boolean hasWarehousesImpl(); @WebMethod public int indexOfWarehousImpl(Warehouse aWarehous); @WebMethod public Customer getCustomerImpl(int index); @WebMethod public int numberOfCustomersImpl(); @WebMethod public boolean hasCustomersImpl(); @WebMethod public int indexOfCustomerImpl(Customer aCustomer); @WebMethod public Order getOrderImpl(int index); @WebMethod public int numberOfOrdersImpl(); @WebMethod public boolean hasOrdersImpl(); @WebMethod public int indexOfOrderImpl(Order aOrder); @WebMethod public boolean addAgentImpl(Agent aAgent); @WebMethod public boolean removeAgentImpl(Agent aAgent); @WebMethod public boolean addAgentAtImpl(Agent aAgent, int index); @WebMethod public boolean addOrMoveAgentAtImpl(Agent aAgent, int index); @WebMethod public boolean addWarehousImpl(Warehouse aWarehous); @WebMethod public boolean removeWarehousImpl(Warehouse aWarehous); @WebMethod public boolean addWarehousAtImpl(Warehouse aWarehous, int index); @WebMethod public boolean addOrMoveWarehousAtImpl(Warehouse aWarehous, int index); @WebMethod public boolean addCustomerImpl(Customer aCustomer); @WebMethod public boolean removeCustomerImpl(Customer aCustomer); @WebMethod public boolean addCustomerAtImpl(Customer aCustomer, int index); @WebMethod public boolean addOrMoveCustomerAtImpl(Customer aCustomer, int index); @WebMethod public boolean addOrderImpl(Order aOrder); @WebMethod public boolean removeOrderImpl(Order aOrder); @WebMethod public boolean addOrderAtImpl(Order aOrder, int index); @WebMethod public boolean addOrMoveOrderAtImpl(Order aOrder, int index); @WebMethod public void deleteImpl(); } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceRMI0; import java.util.*; import java.io.Serializable; // line 114 "../ecommerceRMI0.ump" public class SystemManager implements java.io.Serializable, ISystemManagerImpl { //------------------------ // STATIC VARIABLES //------------------------ private static SystemManager theInstance = null; //------------------------ // MEMBER VARIABLES //------------------------ //SystemManager Associations private transient List<Agent> agents; private transient List<Warehouse> warehouses; private transient List<Customer> customers; private transient List<Order> orders; //------------------------ // CONSTRUCTOR //------------------------ private SystemManager(UmpleRuntime.UmpleComponent umpleComponent) { if(umpleComponent.getNode().getId()!=UmpleRuntime.getThisNodeId()) { if(this.getClass()== SystemManager.class) UmpleRuntime.getInstance().newSystemManager( umpleComponent, this); return; } else { UmpleRuntime.getInstance().newSystemManager(this); } agents = new ArrayList<Agent>(); warehouses = new ArrayList<Warehouse>(); customers = new ArrayList<Customer>(); orders = new ArrayList<Order>(); } public static SystemManager getInstance() { if(theInstance == null) { theInstance = new SystemManager(); } return theInstance; } //------------------------ // Returning the Hashcode //------------------------ public int getHashCodeImpl() { return hashCode(); } //------------------------ // INTERFACE //------------------------ /* Code from template association_GetMany */ public Agent getAgentImpl(int index) { Agent aAgent = agents.get(index); return aAgent; } public List<Agent> getAgentsImpl() { List<Agent> newAgents = Collections.unmodifiableList(agents); return newAgents; } public int numberOfAgentsImpl() { int number = agents.size(); return number; } public boolean hasAgentsImpl() { boolean has = agents.size() > 0; return has; } public int indexOfAgentImpl(Agent aAgent) { int index = agents.indexOf(aAgent); return index; } /* Code from template association_GetMany */ public Warehouse getWarehousImpl(int index) { Warehouse aWarehous = warehouses.get(index); return aWarehous; } public List<Warehouse> getWarehousesImpl() { List<Warehouse> newWarehouses = Collections.unmodifiableList(warehouses); return newWarehouses; } public int numberOfWarehousesImpl() { int number = warehouses.size(); return number; } public boolean hasWarehousesImpl() { boolean has = warehouses.size() > 0; return has; } public int indexOfWarehousImpl(Warehouse aWarehous) { int index = warehouses.indexOf(aWarehous); return index; } /* Code from template association_GetMany */ public Customer getCustomerImpl(int index) { Customer aCustomer = customers.get(index); return aCustomer; } public List<Customer> getCustomersImpl() { List<Customer> newCustomers = Collections.unmodifiableList(customers); return newCustomers; } public int numberOfCustomersImpl() { int number = customers.size(); return number; } public boolean hasCustomersImpl() { boolean has = customers.size() > 0; return has; } public int indexOfCustomerImpl(Customer aCustomer) { int index = customers.indexOf(aCustomer); return index; } /* Code from template association_GetMany */ public Order getOrderImpl(int index) { Order aOrder = orders.get(index); return aOrder; } public List<Order> getOrdersImpl() { List<Order> newOrders = Collections.unmodifiableList(orders); return newOrders; } public int numberOfOrdersImpl() { int number = orders.size(); return number; } public boolean hasOrdersImpl() { boolean has = orders.size() > 0; return has; } public int indexOfOrderImpl(Order aOrder) { int index = orders.indexOf(aOrder); return index; } /* Code from template association_MinimumNumberOfMethod */ public static int minimumNumberOfAgents() { return 0; } /* Code from template association_AddManyToOptionalOne */ public boolean addAgentImpl(Agent aAgent) { boolean wasAdded = false; if (agents.contains(aAgent)) { return false; } SystemManager existingSystemManager = aAgent.getSystemManager(); if (existingSystemManager == null) { aAgent.setSystemManager(this); } else if (!this.equals(existingSystemManager)) { existingSystemManager.removeAgent(aAgent); addAgent(aAgent); } else { agents.add(aAgent); } wasAdded = true; return wasAdded; } public boolean removeAgentImpl(Agent aAgent) { boolean wasRemoved = false; if (agents.contains(aAgent)) { agents.remove(aAgent); aAgent.setSystemManager(null); wasRemoved = true; } return wasRemoved; } /* Code from template association_AddIndexControlFunctions */ public boolean addAgentAtImpl(Agent aAgent, int index) { boolean wasAdded = false; if(addAgent(aAgent)) { if(index < 0 ) { index = 0; } if(index > numberOfAgents()) { index = numberOfAgents() - 1; } agents.remove(aAgent); agents.add(index, aAgent); wasAdded = true; } return wasAdded; } public boolean addOrMoveAgentAtImpl(Agent aAgent, int index) { boolean wasAdded = false; if(agents.contains(aAgent)) { if(index < 0 ) { index = 0; } if(index > numberOfAgents()) { index = numberOfAgents() - 1; } agents.remove(aAgent); agents.add(index, aAgent); wasAdded = true; } else { wasAdded = addAgentAt(aAgent, index); } return wasAdded; } /* Code from template association_MinimumNumberOfMethod */ public static int minimumNumberOfWarehouses() { return 0; } /* Code from template association_AddManyToOptionalOne */ public boolean addWarehousImpl(Warehouse aWarehous) { boolean wasAdded = false; if (warehouses.contains(aWarehous)) { return false; } SystemManager existingSystemManager = aWarehous.getSystemManager(); if (existingSystemManager == null) { aWarehous.setSystemManager(this); } else if (!this.equals(existingSystemManager)) { existingSystemManager.removeWarehous(aWarehous); addWarehous(aWarehous); } else { warehouses.add(aWarehous); } wasAdded = true; return wasAdded; } public boolean removeWarehousImpl(Warehouse aWarehous) { boolean wasRemoved = false; if (warehouses.contains(aWarehous)) { warehouses.remove(aWarehous); aWarehous.setSystemManager(null); wasRemoved = true; } return wasRemoved; } /* Code from template association_AddIndexControlFunctions */ public boolean addWarehousAtImpl(Warehouse aWarehous, int index) { boolean wasAdded = false; if(addWarehous(aWarehous)) { if(index < 0 ) { index = 0; } if(index > numberOfWarehouses()) { index = numberOfWarehouses() - 1; } warehouses.remove(aWarehous); warehouses.add(index, aWarehous); wasAdded = true; } return wasAdded; } public boolean addOrMoveWarehousAtImpl(Warehouse aWarehous, int index) { boolean wasAdded = false; if(warehouses.contains(aWarehous)) { if(index < 0 ) { index = 0; } if(index > numberOfWarehouses()) { index = numberOfWarehouses() - 1; } warehouses.remove(aWarehous); warehouses.add(index, aWarehous); wasAdded = true; } else { wasAdded = addWarehousAt(aWarehous, index); } return wasAdded; } /* Code from template association_MinimumNumberOfMethod */ public static int minimumNumberOfCustomers() { return 0; } /* Code from template association_AddManyToOptionalOne */ public boolean addCustomerImpl(Customer aCustomer) { boolean wasAdded = false; if (customers.contains(aCustomer)) { return false; } SystemManager existingSystemManager = aCustomer.getSystemManager(); if (existingSystemManager == null) { aCustomer.setSystemManager(this); } else if (!this.equals(existingSystemManager)) { existingSystemManager.removeCustomer(aCustomer); addCustomer(aCustomer); } else { customers.add(aCustomer); } wasAdded = true; return wasAdded; } public boolean removeCustomerImpl(Customer aCustomer) { boolean wasRemoved = false; if (customers.contains(aCustomer)) { customers.remove(aCustomer); aCustomer.setSystemManager(null); wasRemoved = true; } return wasRemoved; } /* Code from template association_AddIndexControlFunctions */ public boolean addCustomerAtImpl(Customer aCustomer, int index) { boolean wasAdded = false; if(addCustomer(aCustomer)) { if(index < 0 ) { index = 0; } if(index > numberOfCustomers()) { index = numberOfCustomers() - 1; } customers.remove(aCustomer); customers.add(index, aCustomer); wasAdded = true; } return wasAdded; } public boolean addOrMoveCustomerAtImpl(Customer aCustomer, int index) { boolean wasAdded = false; if(customers.contains(aCustomer)) { if(index < 0 ) { index = 0; } if(index > numberOfCustomers()) { index = numberOfCustomers() - 1; } customers.remove(aCustomer); customers.add(index, aCustomer); wasAdded = true; } else { wasAdded = addCustomerAt(aCustomer, index); } return wasAdded; } /* Code from template association_MinimumNumberOfMethod */ public static int minimumNumberOfOrders() { return 0; } /* Code from template association_AddManyToOptionalOne */ public boolean addOrderImpl(Order aOrder) { boolean wasAdded = false; if (orders.contains(aOrder)) { return false; } SystemManager existingSystemManager = aOrder.getSystemManager(); if (existingSystemManager == null) { aOrder.setSystemManager(this); } else if (!this.equals(existingSystemManager)) { existingSystemManager.removeOrder(aOrder); addOrder(aOrder); } else { orders.add(aOrder); } wasAdded = true; return wasAdded; } public boolean removeOrderImpl(Order aOrder) { boolean wasRemoved = false; if (orders.contains(aOrder)) { orders.remove(aOrder); aOrder.setSystemManager(null); wasRemoved = true; } return wasRemoved; } /* Code from template association_AddIndexControlFunctions */ public boolean addOrderAtImpl(Order aOrder, int index) { boolean wasAdded = false; if(addOrder(aOrder)) { if(index < 0 ) { index = 0; } if(index > numberOfOrders()) { index = numberOfOrders() - 1; } orders.remove(aOrder); orders.add(index, aOrder); wasAdded = true; } return wasAdded; } public boolean addOrMoveOrderAtImpl(Order aOrder, int index) { boolean wasAdded = false; if(orders.contains(aOrder)) { if(index < 0 ) { index = 0; } if(index > numberOfOrders()) { index = numberOfOrders() - 1; } orders.remove(aOrder); orders.add(index, aOrder); wasAdded = true; } else { wasAdded = addOrderAt(aOrder, index); } return wasAdded; } public void deleteImpl() { while( !agents.isEmpty() ) { agents.get(0).setSystemManager(null); } while( !warehouses.isEmpty() ) { warehouses.get(0).setSystemManager(null); } while( !customers.isEmpty() ) { customers.get(0).setSystemManager(null); } while( !orders.isEmpty() ) { orders.get(0).setSystemManager(null); } } public void setRealObject(ISystemManagerImpl aObject) { realObject=aObject; } transient ISystemManagerImpl realObject=this; private SystemManager() { this(UmpleRuntime.getComponent("SystemManager")); } public int getHashCode() { while(true) try{ return realObject.getHashCodeImpl(); } catch(Exception e) {System.err.println(e.toString());} } public Agent getAgent(int index) { while(true) try{ return realObject.getAgentImpl(index); } catch(Exception e) {System.err.println(e.toString());} } public List<Agent> getAgents() { while(true) try{ return realObject.getAgentsImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfAgents() { while(true) try{ return realObject.numberOfAgentsImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasAgents() { while(true) try{ return realObject.hasAgentsImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfAgent(Agent aAgent) { while(true) try{ return realObject.indexOfAgentImpl(aAgent); } catch(Exception e) {System.err.println(e.toString());} } public Warehouse getWarehous(int index) { while(true) try{ return realObject.getWarehousImpl(index); } catch(Exception e) {System.err.println(e.toString());} } public List<Warehouse> getWarehouses() { while(true) try{ return realObject.getWarehousesImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfWarehouses() { while(true) try{ return realObject.numberOfWarehousesImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasWarehouses() { while(true) try{ return realObject.hasWarehousesImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfWarehous(Warehouse aWarehous) { while(true) try{ return realObject.indexOfWarehousImpl(aWarehous); } catch(Exception e) {System.err.println(e.toString());} } public Customer getCustomer(int index) { while(true) try{ return realObject.getCustomerImpl(index); } catch(Exception e) {System.err.println(e.toString());} } public List<Customer> getCustomers() { while(true) try{ return realObject.getCustomersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfCustomers() { while(true) try{ return realObject.numberOfCustomersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasCustomers() { while(true) try{ return realObject.hasCustomersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfCustomer(Customer aCustomer) { while(true) try{ return realObject.indexOfCustomerImpl(aCustomer); } catch(Exception e) {System.err.println(e.toString());} } public Order getOrder(int index) { while(true) try{ return realObject.getOrderImpl(index); } catch(Exception e) {System.err.println(e.toString());} } public List<Order> getOrders() { while(true) try{ return realObject.getOrdersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfOrders() { while(true) try{ return realObject.numberOfOrdersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasOrders() { while(true) try{ return realObject.hasOrdersImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfOrder(Order aOrder) { while(true) try{ return realObject.indexOfOrderImpl(aOrder); } catch(Exception e) {System.err.println(e.toString());} } public boolean addAgent(Agent aAgent) { while(true) try{ return realObject.addAgentImpl(aAgent); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeAgent(Agent aAgent) { while(true) try{ return realObject.removeAgentImpl(aAgent); } catch(Exception e) {System.err.println(e.toString());} } public boolean addAgentAt(Agent aAgent, int index) { while(true) try{ return realObject.addAgentAtImpl(aAgent,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveAgentAt(Agent aAgent, int index) { while(true) try{ return realObject.addOrMoveAgentAtImpl(aAgent,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addWarehous(Warehouse aWarehous) { while(true) try{ return realObject.addWarehousImpl(aWarehous); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeWarehous(Warehouse aWarehous) { while(true) try{ return realObject.removeWarehousImpl(aWarehous); } catch(Exception e) {System.err.println(e.toString());} } public boolean addWarehousAt(Warehouse aWarehous, int index) { while(true) try{ return realObject.addWarehousAtImpl(aWarehous,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveWarehousAt(Warehouse aWarehous, int index) { while(true) try{ return realObject.addOrMoveWarehousAtImpl(aWarehous,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addCustomer(Customer aCustomer) { while(true) try{ return realObject.addCustomerImpl(aCustomer); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeCustomer(Customer aCustomer) { while(true) try{ return realObject.removeCustomerImpl(aCustomer); } catch(Exception e) {System.err.println(e.toString());} } public boolean addCustomerAt(Customer aCustomer, int index) { while(true) try{ return realObject.addCustomerAtImpl(aCustomer,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveCustomerAt(Customer aCustomer, int index) { while(true) try{ return realObject.addOrMoveCustomerAtImpl(aCustomer,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrder(Order aOrder) { while(true) try{ return realObject.addOrderImpl(aOrder); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeOrder(Order aOrder) { while(true) try{ return realObject.removeOrderImpl(aOrder); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrderAt(Order aOrder, int index) { while(true) try{ return realObject.addOrderAtImpl(aOrder,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveOrderAt(Order aOrder, int index) { while(true) try{ return realObject.addOrMoveOrderAtImpl(aOrder,index); } catch(Exception e) {System.err.println(e.toString());} } public void delete() { while(true) try{ realObject.deleteImpl(); break; } catch(Exception e) {System.err.println(e.toString());} } protected ISystemManagerImpl remoteObject; public void setRemoteObject(ISystemManagerImpl aRemoteObject) { remoteObject=aRemoteObject; } public ISystemManagerImpl getRemoteObject() { return (ISystemManagerImpl)remoteObject; } private void readObject(java.io.ObjectInputStream in) throws Exception { try { in.defaultReadObject(); realObject=(ISystemManagerImpl)remoteObject; } catch(Exception e) { throw e; } } public boolean equals(Object obj) { if(obj.getClass()!=this.getClass()) return false; return (getHashCode()==((SystemManager)obj).getHashCode()); } public static SystemManager getInstance(UmpleRuntime.UmpleComponent umpleComponent) { if(theInstance == null) { theInstance = new SystemManager(umpleComponent); } return theInstance; } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceRMI1; import java.util.*; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; import java.rmi.RemoteException; public interface ISupplierImpl extends java.rmi.Remote, IAgentImpl { public void setSelf(Supplier proxy) throws RemoteException; public int getHashCode() throws RemoteException; public Product getProduct(int index) throws RemoteException; public List<Product> getProducts() throws RemoteException; public int numberOfProducts() throws RemoteException; public boolean hasProducts() throws RemoteException; public int indexOfProduct(Product aProduct) throws RemoteException; public boolean addProduct(Product aProduct) throws RemoteException; public boolean removeProduct(Product aProduct) throws RemoteException; public boolean addProductAt(Product aProduct, int index) throws RemoteException; public boolean addOrMoveProductAt(Product aProduct, int index) throws RemoteException; public void delete() throws RemoteException; public Product createProduct(String serialNumber, String productType) throws RemoteException; public void putInWarehouse(Product aProduct, Warehouse warehouse) throws RemoteException; } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package distributed.rmi4; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; import java.io.Serializable; import java.rmi.RemoteException; public interface IMicrowaveImpl extends java.rmi.Remote, ICCImpl { public void setSelf(Microwave proxy) throws RemoteException; public int getHashCode() throws RemoteException; public void delete() throws RemoteException; public int method1(int f) throws RemoteException; } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package distributed.rmi5; import java.util.*; import java.io.Serializable; import java.rmi.registry.Registry; import java.rmi.registry.LocateRegistry; import java.rmi.server.UnicastRemoteObject; public class MicrowaveRemote implements IMicrowaveImpl { Microwave realObject; public void setRealObject(Microwave aObject) { realObject=aObject; } public MicrowaveRemote() {} public MicrowaveRemote(Microwave aObject) { realObject=aObject; } public int getHashCodeImpl() { while(true) try{ return realObject.getHashCodeImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean setXImpl(int aX) { while(true) try{ return realObject.setXImpl(aX); } catch(Exception e) {System.err.println(e.toString());} } public boolean setFImpl(String aF) { while(true) try{ return realObject.setFImpl(aF); } catch(Exception e) {System.err.println(e.toString());} } public int getXImpl() { while(true) try{ return realObject.getXImpl(); } catch(Exception e) {System.err.println(e.toString());} } public String getFImpl() { while(true) try{ return realObject.getFImpl(); } catch(Exception e) {System.err.println(e.toString());} } public Client getClientImpl(int index) { while(true) try{ return realObject.getClientImpl(index); } catch(Exception e) {System.err.println(e.toString());} } public List<Client> getClientsImpl() { while(true) try{ return realObject.getClientsImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfClientsImpl() { while(true) try{ return realObject.numberOfClientsImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasClientsImpl() { while(true) try{ return realObject.hasClientsImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfClientImpl(Client aClient) { while(true) try{ return realObject.indexOfClientImpl(aClient); } catch(Exception e) {System.err.println(e.toString());} } public boolean addClientImpl(Client aClient) { while(true) try{ return realObject.addClientImpl(aClient); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeClientImpl(Client aClient) { while(true) try{ return realObject.removeClientImpl(aClient); } catch(Exception e) {System.err.println(e.toString());} } public boolean addClientAtImpl(Client aClient, int index) { while(true) try{ return realObject.addClientAtImpl(aClient,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveClientAtImpl(Client aClient, int index) { while(true) try{ return realObject.addOrMoveClientAtImpl(aClient,index); } catch(Exception e) {System.err.println(e.toString());} } public void deleteImpl() { while(true) try{ realObject.deleteImpl(); break; } catch(Exception e) {System.err.println(e.toString());} } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package distributed.rmi5; import java.applet.*; import java.util.*; import java.io.Serializable; // line 6 "../../Class_DistributableRMI5.ump" // line 28 "../../Class_DistributableRMI5.ump" public class Client implements java.io.Serializable, IClientImpl { //------------------------ // MEMBER VARIABLES //------------------------ //Client Attributes private transient String id; //Client Associations private transient List<Microwave> microwaves; //------------------------ // CONSTRUCTOR //------------------------ public Client(UmpleRuntime.UmpleComponent umpleComponent) { if(umpleComponent.getNode().getId()!=UmpleRuntime.getThisNodeId()) { if(this.getClass()== Client.class) UmpleRuntime.getInstance().newClient( umpleComponent, this); return; } else { UmpleRuntime.getInstance().newClient(this); } id = "s"; microwaves = new ArrayList<Microwave>(); } //------------------------ // Returning the Hashcode //------------------------ public int getHashCodeImpl() { return hashCode(); } //------------------------ // INTERFACE //------------------------ public boolean setIdImpl(String aId) { boolean wasSet = false; id = aId; wasSet = true; return wasSet; } /** * isA ClientI; */ public String getIdImpl() { return id; } /* Code from template association_GetMany */ public Microwave getMicrowaveImpl(int index) { Microwave aMicrowave = microwaves.get(index); return aMicrowave; } public List<Microwave> getMicrowavesImpl() { List<Microwave> newMicrowaves = Collections.unmodifiableList(microwaves); return newMicrowaves; } public int numberOfMicrowavesImpl() { int number = microwaves.size(); return number; } public boolean hasMicrowavesImpl() { boolean has = microwaves.size() > 0; return has; } public int indexOfMicrowaveImpl(Microwave aMicrowave) { int index = microwaves.indexOf(aMicrowave); return index; } /* Code from template association_MinimumNumberOfMethod */ public static int minimumNumberOfMicrowaves() { return 0; } /* Code from template association_AddManyToManyMethod */ public boolean addMicrowaveImpl(Microwave aMicrowave) { boolean wasAdded = false; if (microwaves.contains(aMicrowave)) { return false; } microwaves.add(aMicrowave); if (aMicrowave.indexOfClient(this) != -1) { wasAdded = true; } else { wasAdded = aMicrowave.addClient(this); if (!wasAdded) { microwaves.remove(aMicrowave); } } return wasAdded; } /* Code from template association_RemoveMany */ public boolean removeMicrowaveImpl(Microwave aMicrowave) { boolean wasRemoved = false; if (!microwaves.contains(aMicrowave)) { return wasRemoved; } int oldIndex = microwaves.indexOf(aMicrowave); microwaves.remove(oldIndex); if (aMicrowave.indexOfClient(this) == -1) { wasRemoved = true; } else { wasRemoved = aMicrowave.removeClient(this); if (!wasRemoved) { microwaves.add(oldIndex,aMicrowave); } } return wasRemoved; } /* Code from template association_AddIndexControlFunctions */ public boolean addMicrowaveAtImpl(Microwave aMicrowave, int index) { boolean wasAdded = false; if(addMicrowave(aMicrowave)) { if(index < 0 ) { index = 0; } if(index > numberOfMicrowaves()) { index = numberOfMicrowaves() - 1; } microwaves.remove(aMicrowave); microwaves.add(index, aMicrowave); wasAdded = true; } return wasAdded; } public boolean addOrMoveMicrowaveAtImpl(Microwave aMicrowave, int index) { boolean wasAdded = false; if(microwaves.contains(aMicrowave)) { if(index < 0 ) { index = 0; } if(index > numberOfMicrowaves()) { index = numberOfMicrowaves() - 1; } microwaves.remove(aMicrowave); microwaves.add(index, aMicrowave); wasAdded = true; } else { wasAdded = addMicrowaveAt(aMicrowave, index); } return wasAdded; } public void deleteImpl() { ArrayList<Microwave> copyOfMicrowaves = new ArrayList<Microwave>(microwaves); microwaves.clear(); for(Microwave aMicrowave : copyOfMicrowaves) { aMicrowave.removeClient(this); } } /** * key{id} * isA CC; */ // line 16 "../../Class_DistributableRMI5.ump" public static void method2(){ } // line 19 "../../Class_DistributableRMI5.ump" static int method3(){ return 12; } public String toString() { return super.toString() + "["+ "id" + ":" + getId()+ "]"; } public void setRealObject(IClientImpl aObject) { realObject=aObject; } transient IClientImpl realObject=this; public Client() { this(UmpleRuntime.getComponent("Client")); } public int getHashCode() { while(true) try{ return realObject.getHashCodeImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean setId(String aId) { while(true) try{ return realObject.setIdImpl(aId); } catch(Exception e) {System.err.println(e.toString());} } public String getId() { while(true) try{ return realObject.getIdImpl(); } catch(Exception e) {System.err.println(e.toString());} } public Microwave getMicrowave(int index) { while(true) try{ return realObject.getMicrowaveImpl(index); } catch(Exception e) {System.err.println(e.toString());} } public List<Microwave> getMicrowaves() { while(true) try{ return realObject.getMicrowavesImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfMicrowaves() { while(true) try{ return realObject.numberOfMicrowavesImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasMicrowaves() { while(true) try{ return realObject.hasMicrowavesImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfMicrowave(Microwave aMicrowave) { while(true) try{ return realObject.indexOfMicrowaveImpl(aMicrowave); } catch(Exception e) {System.err.println(e.toString());} } public boolean addMicrowave(Microwave aMicrowave) { while(true) try{ return realObject.addMicrowaveImpl(aMicrowave); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeMicrowave(Microwave aMicrowave) { while(true) try{ return realObject.removeMicrowaveImpl(aMicrowave); } catch(Exception e) {System.err.println(e.toString());} } public boolean addMicrowaveAt(Microwave aMicrowave, int index) { while(true) try{ return realObject.addMicrowaveAtImpl(aMicrowave,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveMicrowaveAt(Microwave aMicrowave, int index) { while(true) try{ return realObject.addOrMoveMicrowaveAtImpl(aMicrowave,index); } catch(Exception e) {System.err.println(e.toString());} } public void delete() { while(true) try{ realObject.deleteImpl(); break; } catch(Exception e) {System.err.println(e.toString());} } protected IClientImpl remoteObject; public void setRemoteObject(IClientImpl aRemoteObject) { remoteObject=aRemoteObject; } public IClientImpl getRemoteObject() { return (IClientImpl)remoteObject; } private void readObject(java.io.ObjectInputStream in) throws Exception { try { in.defaultReadObject(); realObject=(IClientImpl)remoteObject; } catch(Exception e) { throw e; } } public boolean equals(Object obj) { if(obj.getClass()!=this.getClass()) return false; return (getHashCode()==((Client)obj).getHashCode()); } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceRMI0; import java.util.*; import java.io.Serializable; import java.rmi.RemoteException; public interface ISystemManagerImpl extends java.rmi.Remote { public int getHashCodeImpl() throws RemoteException; public Agent getAgentImpl(int index) throws RemoteException; public List<Agent> getAgentsImpl() throws RemoteException; public int numberOfAgentsImpl() throws RemoteException; public boolean hasAgentsImpl() throws RemoteException; public int indexOfAgentImpl(Agent aAgent) throws RemoteException; public Warehouse getWarehousImpl(int index) throws RemoteException; public List<Warehouse> getWarehousesImpl() throws RemoteException; public int numberOfWarehousesImpl() throws RemoteException; public boolean hasWarehousesImpl() throws RemoteException; public int indexOfWarehousImpl(Warehouse aWarehous) throws RemoteException; public Customer getCustomerImpl(int index) throws RemoteException; public List<Customer> getCustomersImpl() throws RemoteException; public int numberOfCustomersImpl() throws RemoteException; public boolean hasCustomersImpl() throws RemoteException; public int indexOfCustomerImpl(Customer aCustomer) throws RemoteException; public Order getOrderImpl(int index) throws RemoteException; public List<Order> getOrdersImpl() throws RemoteException; public int numberOfOrdersImpl() throws RemoteException; public boolean hasOrdersImpl() throws RemoteException; public int indexOfOrderImpl(Order aOrder) throws RemoteException; public boolean addAgentImpl(Agent aAgent) throws RemoteException; public boolean removeAgentImpl(Agent aAgent) throws RemoteException; public boolean addAgentAtImpl(Agent aAgent, int index) throws RemoteException; public boolean addOrMoveAgentAtImpl(Agent aAgent, int index) throws RemoteException; public boolean addWarehousImpl(Warehouse aWarehous) throws RemoteException; public boolean removeWarehousImpl(Warehouse aWarehous) throws RemoteException; public boolean addWarehousAtImpl(Warehouse aWarehous, int index) throws RemoteException; public boolean addOrMoveWarehousAtImpl(Warehouse aWarehous, int index) throws RemoteException; public boolean addCustomerImpl(Customer aCustomer) throws RemoteException; public boolean removeCustomerImpl(Customer aCustomer) throws RemoteException; public boolean addCustomerAtImpl(Customer aCustomer, int index) throws RemoteException; public boolean addOrMoveCustomerAtImpl(Customer aCustomer, int index) throws RemoteException; public boolean addOrderImpl(Order aOrder) throws RemoteException; public boolean removeOrderImpl(Order aOrder) throws RemoteException; public boolean addOrderAtImpl(Order aOrder, int index) throws RemoteException; public boolean addOrMoveOrderAtImpl(Order aOrder, int index) throws RemoteException; public void deleteImpl() throws RemoteException; } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceWS; import java.util.*; import java.io.Serializable; import javax.xml.namespace.QName; import java.net.URL; import javax.xml.ws.Service; import javax.xml.ws.Endpoint; import javax.jws.WebService; import javax.xml.bind.Unmarshaller; import javax.xml.bind.annotation.*; import javax.jws.WebMethod; import javax.jws.WebService; import javax.jws.soap.SOAPBinding; import javax.jws.soap.SOAPBinding.Style; import java.rmi.RemoteException; @WebService @SOAPBinding(style = Style.RPC) public interface ICustomerImpl { @WebMethod public int getHashCodeImpl(); @WebMethod public boolean setNameImpl(String aName); @WebMethod public String getNameImpl(); @WebMethod public Vendor getVendorImpl(int index); @WebMethod public int numberOfVendorsImpl(); @WebMethod public boolean hasVendorsImpl(); @WebMethod public int indexOfVendorImpl(Vendor aVendor); @WebMethod public Order getOrderImpl(int index); @WebMethod public int numberOfOrdersImpl(); @WebMethod public boolean hasOrdersImpl(); @WebMethod public int indexOfOrderImpl(Order aOrder); @WebMethod public SystemManager getSystemManagerImpl(); @WebMethod public boolean hasSystemManagerImpl(); @WebMethod public boolean addVendorImpl(Vendor aVendor); @WebMethod public boolean removeVendorImpl(Vendor aVendor); @WebMethod public boolean addVendorAtImpl(Vendor aVendor, int index); @WebMethod public boolean addOrMoveVendorAtImpl(Vendor aVendor, int index); @WebMethod public boolean addOrderImpl(Order aOrder); @WebMethod public boolean removeOrderImpl(Order aOrder); @WebMethod public boolean addOrderAtImpl(Order aOrder, int index); @WebMethod public boolean addOrMoveOrderAtImpl(Order aOrder, int index); @WebMethod public boolean setSystemManagerImpl(SystemManager aSystemManager); @WebMethod public void deleteImpl(); @WebMethod public Order orderProductImpl(String productType, String vendorName); } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceWS; import java.util.*; import java.io.Serializable; import javax.xml.namespace.QName; import java.net.URL; import javax.xml.ws.Service; import javax.xml.ws.Endpoint; import javax.jws.WebService; import javax.xml.bind.Unmarshaller; import javax.xml.bind.annotation.*; import javax.jws.WebMethod; import javax.jws.WebService; import javax.jws.soap.SOAPBinding; import javax.jws.soap.SOAPBinding.Style; import java.rmi.RemoteException; @WebService @SOAPBinding(style = Style.RPC) public interface IVendorImpl extends IAgentImpl { @WebMethod public int getHashCodeImpl(); @WebMethod public Warehouse getWarehousImpl(int index); @WebMethod public int numberOfWarehousesImpl(); @WebMethod public boolean hasWarehousesImpl(); @WebMethod public int indexOfWarehousImpl(Warehouse aWarehous); @WebMethod public Order getOrderImpl(int index); @WebMethod public int numberOfOrdersImpl(); @WebMethod public boolean hasOrdersImpl(); @WebMethod public int indexOfOrderImpl(Order aOrder); @WebMethod public Customer getCustomerImpl(int index); @WebMethod public int numberOfCustomersImpl(); @WebMethod public boolean hasCustomersImpl(); @WebMethod public int indexOfCustomerImpl(Customer aCustomer); @WebMethod public boolean addWarehousImpl(Warehouse aWarehous); @WebMethod public boolean removeWarehousImpl(Warehouse aWarehous); @WebMethod public boolean addWarehousAtImpl(Warehouse aWarehous, int index); @WebMethod public boolean addOrMoveWarehousAtImpl(Warehouse aWarehous, int index); @WebMethod public boolean addOrderImpl(Order aOrder); @WebMethod public boolean removeOrderImpl(Order aOrder); @WebMethod public boolean addOrderAtImpl(Order aOrder, int index); @WebMethod public boolean addOrMoveOrderAtImpl(Order aOrder, int index); @WebMethod public boolean addCustomerImpl(Customer aCustomer); @WebMethod public boolean removeCustomerImpl(Customer aCustomer); @WebMethod public boolean addCustomerAtImpl(Customer aCustomer, int index); @WebMethod public boolean addOrMoveCustomerAtImpl(Customer aCustomer, int index); @WebMethod public void deleteImpl(); @WebMethod public Product findProductImpl(ProductType productType); @WebMethod public Order makeOrderImpl(Customer aCustomer, Product aProduct); } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceWS; import java.io.Serializable; import javax.xml.namespace.QName; import java.net.URL; import javax.xml.ws.Service; import javax.xml.ws.Endpoint; import javax.jws.WebService; import javax.xml.bind.Unmarshaller; import javax.xml.bind.annotation.*; // line 34 "../ecommerceWS.ump" @WebService(endpointInterface = "ecommerceWS.IAgentImpl") @XmlAccessorType(XmlAccessType.FIELD) @XmlType(factoryMethod="umplenewInstance", propOrder={"remoteUrl", "objectId", "remotePort"}) public class Agent implements java.io.Serializable, IAgentImpl { //------------------------ // MEMBER VARIABLES //------------------------ //Agent Attributes private transient String name; //Agent Associations private transient SystemManager systemManager; //------------------------ // CONSTRUCTOR //------------------------ public Agent(String aName, UmpleRuntime.UmpleComponent umpleComponent) { if(umpleComponent.getNode().getId()!=UmpleRuntime.getThisNodeId()) { if(this.getClass()== Agent.class) UmpleRuntime.getInstance().newAgent(aName, umpleComponent, this); return; } else { UmpleRuntime.getInstance().newAgent(this); } name = aName; } //------------------------ // Returning the Hashcode //------------------------ public int getHashCodeImpl() { return hashCode(); } //------------------------ // INTERFACE //------------------------ public boolean setNameImpl(String aName) { boolean wasSet = false; name = aName; wasSet = true; return wasSet; } public String getNameImpl() { return name; } /* Code from template association_GetOne */ public SystemManager getSystemManagerImpl() { return systemManager; } public boolean hasSystemManagerImpl() { boolean has = systemManager != null; return has; } /* Code from template association_SetOptionalOneToMany */ public boolean setSystemManagerImpl(SystemManager aSystemManager) { boolean wasSet = false; SystemManager existingSystemManager = systemManager; systemManager = aSystemManager; if (existingSystemManager != null && !existingSystemManager.equals(aSystemManager)) { existingSystemManager.removeAgent(this); } if (aSystemManager != null) { aSystemManager.addAgent(this); } wasSet = true; return wasSet; } public void deleteImpl() { if (systemManager != null) { SystemManager placeholderSystemManager = systemManager; this.systemManager = null; placeholderSystemManager.removeAgent(this); } } public String toString() { return super.toString() + "["+ "name" + ":" + getName()+ "]" + System.getProperties().getProperty("line.separator") + " " + "systemManager = "+(getSystemManager()!=null?Integer.toHexString(System.identityHashCode(getSystemManager())):"null"); } transient IAgentImpl realObject=this; public Agent(String aName) { this(aName,UmpleRuntime.getComponent("Agent")); } public int getHashCode() { while(true) try{ return realObject.getHashCodeImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean setName(String aName) { while(true) try{ return realObject.setNameImpl(aName); } catch(Exception e) {System.err.println(e.toString());} } public String getName() { while(true) try{ return realObject.getNameImpl(); } catch(Exception e) {System.err.println(e.toString());} } public SystemManager getSystemManager() { while(true) try{ return realObject.getSystemManagerImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasSystemManager() { while(true) try{ return realObject.hasSystemManagerImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean setSystemManager(SystemManager aSystemManager) { while(true) try{ return realObject.setSystemManagerImpl(aSystemManager); } catch(Exception e) {System.err.println(e.toString());} } public void delete() { while(true) try{ realObject.deleteImpl(); break; } catch(Exception e) {System.err.println(e.toString());} } public String remoteUrl; public String objectId; public String remotePort; private static Agent umplenewInstance() { return new Agent((UmpleRuntime.UmpleNode)null); } protected Agent (UmpleRuntime.UmpleNode node) { } public void setRealObject(IAgentImpl aObject) { realObject=aObject; } void afterUnmarshal(Unmarshaller u, Object parent) { initializeConnection(); } private void initializeConnection() { if(objectId.contains(Agent.class.getName())) { boolean success = false; while (!success) { try { URL url = new URL(remoteUrl+":"+remotePort+"/Agent"+objectId+"?wsdl"); QName qname = new QName("https://ecommerceWS/","AgentService"); Service service = Service.create(url, qname); setRealObject(service.getPort(IAgentImpl.class)); success = true; } catch (Exception e) { System.err.println("Client exception: " + e.toString()); e.printStackTrace(); try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } } } } public boolean equals(Object obj) { if(obj.getClass()!=this.getClass()) return false; return (getHashCode()==((Agent)obj).getHashCode()); } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceWS; import java.io.Serializable; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAccessType; // line 38 "../ecommerceWS.ump" @XmlAccessorType(XmlAccessType.FIELD) public class Order implements java.io.Serializable { //------------------------ // MEMBER VARIABLES //------------------------ //Order Associations private Customer customer; private Vendor vendor; private Product product; private SystemManager systemManager; //------------------------ // CONSTRUCTOR //------------------------ public Order(Product aProduct) { if (!setProduct(aProduct)) { throw new RuntimeException("Unable to create Order due to aProduct. See https://manual.umple.org?RE002ViolationofAssociationMultiplicity.html"); } } //------------------------ // INTERFACE //------------------------ /* Code from template association_GetOne */ public Customer getCustomer() { return customer; } public boolean hasCustomer() { boolean has = customer != null; return has; } /* Code from template association_GetOne */ public Vendor getVendor() { return vendor; } public boolean hasVendor() { boolean has = vendor != null; return has; } /* Code from template association_GetOne */ public Product getProduct() { return product; } /* Code from template association_GetOne */ public SystemManager getSystemManager() { return systemManager; } public boolean hasSystemManager() { boolean has = systemManager != null; return has; } /* Code from template association_SetOptionalOneToMany */ public boolean setCustomer(Customer aCustomer) { boolean wasSet = false; Customer existingCustomer = customer; customer = aCustomer; if (existingCustomer != null && !existingCustomer.equals(aCustomer)) { existingCustomer.removeOrder(this); } if (aCustomer != null) { aCustomer.addOrder(this); } wasSet = true; return wasSet; } /* Code from template association_SetOptionalOneToMany */ public boolean setVendor(Vendor aVendor) { boolean wasSet = false; Vendor existingVendor = vendor; vendor = aVendor; if (existingVendor != null && !existingVendor.equals(aVendor)) { existingVendor.removeOrder(this); } if (aVendor != null) { aVendor.addOrder(this); } wasSet = true; return wasSet; } /* Code from template association_SetUnidirectionalOne */ public boolean setProduct(Product aNewProduct) { boolean wasSet = false; if (aNewProduct != null) { product = aNewProduct; wasSet = true; } return wasSet; } /* Code from template association_SetOptionalOneToMany */ public boolean setSystemManager(SystemManager aSystemManager) { boolean wasSet = false; SystemManager existingSystemManager = systemManager; systemManager = aSystemManager; if (existingSystemManager != null && !existingSystemManager.equals(aSystemManager)) { existingSystemManager.removeOrder(this); } if (aSystemManager != null) { aSystemManager.addOrder(this); } wasSet = true; return wasSet; } public void delete() { if (customer != null) { Customer placeholderCustomer = customer; this.customer = null; placeholderCustomer.removeOrder(this); } if (vendor != null) { Vendor placeholderVendor = vendor; this.vendor = null; placeholderVendor.removeOrder(this); } product = null; if (systemManager != null) { SystemManager placeholderSystemManager = systemManager; this.systemManager = null; placeholderSystemManager.removeOrder(this); } } // line 41 "../ecommerceWS.ump" public Order(){ } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceRMI1; import java.util.*; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; // line 116 "../ecommerceRMI1.ump" public class SystemManagerImpl implements java.io.Serializable , ISystemManagerImpl { //------------------------ // STATIC VARIABLES //------------------------ private static SystemManagerImpl theInstance = null; //------------------------ // MEMBER VARIABLES //------------------------ //SystemManagerImpl Associations private List<Agent> agents; private List<Warehouse> warehouses; private List<Customer> customers; private List<Order> orders; //------------------------ // CONSTRUCTOR //------------------------ private SystemManagerImpl() { agents = new ArrayList<Agent>(); warehouses = new ArrayList<Warehouse>(); customers = new ArrayList<Customer>(); orders = new ArrayList<Order>(); } public static SystemManagerImpl getInstance() { if(theInstance == null) { theInstance = new SystemManagerImpl(); } return theInstance; } //------------------------ // Reference to the proxy //------------------------ SystemManager self; public void setSelf(SystemManager proxy) { self=proxy; } //------------------------ // Returning the Hashcode //------------------------ public int getHashCode() { return hashCode(); } //------------------------ // INTERFACE //------------------------ /* Code from template association_GetMany */ public Agent getAgent(int index) { Agent aAgent = agents.get(index); return aAgent; } public List<Agent> getAgents() { List<Agent> newAgents = Collections.unmodifiableList(agents); return newAgents; } public int numberOfAgents() { int number = agents.size(); return number; } public boolean hasAgents() { boolean has = agents.size() > 0; return has; } public int indexOfAgent(Agent aAgent) { int index = agents.indexOf(aAgent); return index; } /* Code from template association_GetMany */ public Warehouse getWarehous(int index) { Warehouse aWarehous = warehouses.get(index); return aWarehous; } public List<Warehouse> getWarehouses() { List<Warehouse> newWarehouses = Collections.unmodifiableList(warehouses); return newWarehouses; } public int numberOfWarehouses() { int number = warehouses.size(); return number; } public boolean hasWarehouses() { boolean has = warehouses.size() > 0; return has; } public int indexOfWarehous(Warehouse aWarehous) { int index = warehouses.indexOf(aWarehous); return index; } /* Code from template association_GetMany */ public Customer getCustomer(int index) { Customer aCustomer = customers.get(index); return aCustomer; } public List<Customer> getCustomers() { List<Customer> newCustomers = Collections.unmodifiableList(customers); return newCustomers; } public int numberOfCustomers() { int number = customers.size(); return number; } public boolean hasCustomers() { boolean has = customers.size() > 0; return has; } public int indexOfCustomer(Customer aCustomer) { int index = customers.indexOf(aCustomer); return index; } /* Code from template association_GetMany */ public Order getOrder(int index) { Order aOrder = orders.get(index); return aOrder; } public List<Order> getOrders() { List<Order> newOrders = Collections.unmodifiableList(orders); return newOrders; } public int numberOfOrders() { int number = orders.size(); return number; } public boolean hasOrders() { boolean has = orders.size() > 0; return has; } public int indexOfOrder(Order aOrder) { int index = orders.indexOf(aOrder); return index; } /* Code from template association_MinimumNumberOfMethod */ public static int minimumNumberOfAgents() { return 0; } /* Code from template association_AddManyToOptionalOne */ public boolean addAgent(Agent aAgent) { boolean wasAdded = false; if (agents.contains(aAgent)) { return false; } SystemManager existingSystemManager = aAgent.getSystemManager(); if (existingSystemManager == null) { aAgent.setSystemManager(self); } else if (!self.equals(existingSystemManager)) { existingSystemManager.removeAgent(aAgent); addAgent(aAgent); } else { agents.add(aAgent); } wasAdded = true; return wasAdded; } public boolean removeAgent(Agent aAgent) { boolean wasRemoved = false; if (agents.contains(aAgent)) { agents.remove(aAgent); aAgent.setSystemManager(null); wasRemoved = true; } return wasRemoved; } /* Code from template association_AddIndexControlFunctions */ public boolean addAgentAt(Agent aAgent, int index) { boolean wasAdded = false; if(addAgent(aAgent)) { if(index < 0 ) { index = 0; } if(index > numberOfAgents()) { index = numberOfAgents() - 1; } agents.remove(aAgent); agents.add(index, aAgent); wasAdded = true; } return wasAdded; } public boolean addOrMoveAgentAt(Agent aAgent, int index) { boolean wasAdded = false; if(agents.contains(aAgent)) { if(index < 0 ) { index = 0; } if(index > numberOfAgents()) { index = numberOfAgents() - 1; } agents.remove(aAgent); agents.add(index, aAgent); wasAdded = true; } else { wasAdded = addAgentAt(aAgent, index); } return wasAdded; } /* Code from template association_MinimumNumberOfMethod */ public static int minimumNumberOfWarehouses() { return 0; } /* Code from template association_AddManyToOptionalOne */ public boolean addWarehous(Warehouse aWarehous) { boolean wasAdded = false; if (warehouses.contains(aWarehous)) { return false; } SystemManager existingSystemManager = aWarehous.getSystemManager(); if (existingSystemManager == null) { aWarehous.setSystemManager(self); } else if (!self.equals(existingSystemManager)) { existingSystemManager.removeWarehous(aWarehous); addWarehous(aWarehous); } else { warehouses.add(aWarehous); } wasAdded = true; return wasAdded; } public boolean removeWarehous(Warehouse aWarehous) { boolean wasRemoved = false; if (warehouses.contains(aWarehous)) { warehouses.remove(aWarehous); aWarehous.setSystemManager(null); wasRemoved = true; } return wasRemoved; } /* Code from template association_AddIndexControlFunctions */ public boolean addWarehousAt(Warehouse aWarehous, int index) { boolean wasAdded = false; if(addWarehous(aWarehous)) { if(index < 0 ) { index = 0; } if(index > numberOfWarehouses()) { index = numberOfWarehouses() - 1; } warehouses.remove(aWarehous); warehouses.add(index, aWarehous); wasAdded = true; } return wasAdded; } public boolean addOrMoveWarehousAt(Warehouse aWarehous, int index) { boolean wasAdded = false; if(warehouses.contains(aWarehous)) { if(index < 0 ) { index = 0; } if(index > numberOfWarehouses()) { index = numberOfWarehouses() - 1; } warehouses.remove(aWarehous); warehouses.add(index, aWarehous); wasAdded = true; } else { wasAdded = addWarehousAt(aWarehous, index); } return wasAdded; } /* Code from template association_MinimumNumberOfMethod */ public static int minimumNumberOfCustomers() { return 0; } /* Code from template association_AddManyToOptionalOne */ public boolean addCustomer(Customer aCustomer) { boolean wasAdded = false; if (customers.contains(aCustomer)) { return false; } SystemManager existingSystemManager = aCustomer.getSystemManager(); if (existingSystemManager == null) { aCustomer.setSystemManager(self); } else if (!self.equals(existingSystemManager)) { existingSystemManager.removeCustomer(aCustomer); addCustomer(aCustomer); } else { customers.add(aCustomer); } wasAdded = true; return wasAdded; } public boolean removeCustomer(Customer aCustomer) { boolean wasRemoved = false; if (customers.contains(aCustomer)) { customers.remove(aCustomer); aCustomer.setSystemManager(null); wasRemoved = true; } return wasRemoved; } /* Code from template association_AddIndexControlFunctions */ public boolean addCustomerAt(Customer aCustomer, int index) { boolean wasAdded = false; if(addCustomer(aCustomer)) { if(index < 0 ) { index = 0; } if(index > numberOfCustomers()) { index = numberOfCustomers() - 1; } customers.remove(aCustomer); customers.add(index, aCustomer); wasAdded = true; } return wasAdded; } public boolean addOrMoveCustomerAt(Customer aCustomer, int index) { boolean wasAdded = false; if(customers.contains(aCustomer)) { if(index < 0 ) { index = 0; } if(index > numberOfCustomers()) { index = numberOfCustomers() - 1; } customers.remove(aCustomer); customers.add(index, aCustomer); wasAdded = true; } else { wasAdded = addCustomerAt(aCustomer, index); } return wasAdded; } /* Code from template association_MinimumNumberOfMethod */ public static int minimumNumberOfOrders() { return 0; } /* Code from template association_AddManyToOptionalOne */ public boolean addOrder(Order aOrder) { boolean wasAdded = false; if (orders.contains(aOrder)) { return false; } SystemManager existingSystemManager = aOrder.getSystemManager(); if (existingSystemManager == null) { aOrder.setSystemManager(self); } else if (!self.equals(existingSystemManager)) { existingSystemManager.removeOrder(aOrder); addOrder(aOrder); } else { orders.add(aOrder); } wasAdded = true; return wasAdded; } public boolean removeOrder(Order aOrder) { boolean wasRemoved = false; if (orders.contains(aOrder)) { orders.remove(aOrder); aOrder.setSystemManager(null); wasRemoved = true; } return wasRemoved; } /* Code from template association_AddIndexControlFunctions */ public boolean addOrderAt(Order aOrder, int index) { boolean wasAdded = false; if(addOrder(aOrder)) { if(index < 0 ) { index = 0; } if(index > numberOfOrders()) { index = numberOfOrders() - 1; } orders.remove(aOrder); orders.add(index, aOrder); wasAdded = true; } return wasAdded; } public boolean addOrMoveOrderAt(Order aOrder, int index) { boolean wasAdded = false; if(orders.contains(aOrder)) { if(index < 0 ) { index = 0; } if(index > numberOfOrders()) { index = numberOfOrders() - 1; } orders.remove(aOrder); orders.add(index, aOrder); wasAdded = true; } else { wasAdded = addOrderAt(aOrder, index); } return wasAdded; } public void delete() { while( !agents.isEmpty() ) { agents.get(0).setSystemManager(null); } while( !warehouses.isEmpty() ) { warehouses.get(0).setSystemManager(null); } while( !customers.isEmpty() ) { customers.get(0).setSystemManager(null); } while( !orders.isEmpty() ) { orders.get(0).setSystemManager(null); } } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package distributed.rmi5; import java.rmi.Remote; import java.util.Properties; import java.applet.*; import java.io.*; import java.io.IOException; import java.io.FileInputStream; import java.rmi.registry.Registry; import java.io.InputStreamReader; import java.io.File; import distributed.rmi5.Microwave; import java.rmi.RemoteException; import java.io.Serializable; import distributed.rmi5.Client; import java.util.regex.Matcher; import java.rmi.registry.LocateRegistry; import java.util.*; import java.rmi.server.UnicastRemoteObject; import java.io.BufferedReader; import java.io.FileReader; import java.util.regex.Pattern; import java.io.InputStream; public class UmpleRuntime implements IUmpleRuntime { private static Boolean isAlive = true; static int thisNodeId=-1; private int numberOfNodes=0; private static String fileAddress=""; static HashMap<Integer, UmpleNode> nodes=new HashMap<Integer, UmpleNode>(); static HashMap <String, UmpleComponent> components= new HashMap<String, UmpleComponent>(); public static void setFileAddress(String address) { fileAddress=address; } public static int getThisNodeId() { return thisNodeId; } private static void setThisNodeId(int id) { thisNodeId=id; } private static void readPropertiesFile() { String location="configuration.txt"; Properties prop = new Properties(); InputStream input = null; try { input = new FileInputStream("node.properties"); prop.load(input); if(getThisNodeId()<0) setThisNodeId(Integer.parseInt(prop.getProperty("name"))); location=prop.getProperty("location"); setFileAddress(location); } catch (IOException e) { e.printStackTrace(); if(getThisNodeId()<0) setThisNodeId(0); setFileAddress(location); } finally { if (input != null) { try { input.close(); } catch (IOException e) { e.printStackTrace(); } } } } public static UmpleComponent getComponent(String runtimeComponentName) { getInstance(); UmpleComponent aComponent=components.get(runtimeComponentName.toLowerCase()); if (aComponent!=null) return aComponent; else return components.get("local"); } public static void stopAll() { UmpleRuntime.getInstance().stopAllNodes(); } public void stopAllNodes() { for(int node=0;node<numberOfNodes;node=node+1) { if(node!=getThisNodeId()) { try { remoteFactories.get(node).stopNode(); } catch(Exception e) {System.err.println(e.toString());} } } stopNode(); } // ******************************** Factory public static UmpleRuntime theInstance = null; List<IUmpleRuntime> remoteFactories; public List<Object> listOfObjects; public static UmpleRuntime getInstance() { if(theInstance==null){ theInstance = new UmpleRuntime(); } return theInstance; } private UmpleRuntime() { listOfObjects=new ArrayList<Object>(); remoteFactories= new ArrayList<IUmpleRuntime>(); initialize(); } public int getNodeId(int umpleNodeId) { int nodeId=umpleNodeId; if(nodeId>=numberOfNodes) nodeId=numberOfNodes-1; return nodeId; } public int getNodeId(UmpleComponent umpleComponent) { return umpleComponent.getNode().getId(); } private void readConfigFile() { String input="{id=0; port=1099; https://localhost {component1}}{id=1; port=1700; https://localhost {component2}}"; try (BufferedReader br = new BufferedReader(new FileReader(fileAddress))) { input=""; String line; while ((line = br.readLine()) != null) { // Merging the lines input+=line+";"; } } catch (IOException e) { e.printStackTrace(); } finally { if (input != null) { int startIndex=input.indexOf("{"); if(startIndex>=0) //while(startIndex>=0) { Pattern pattern1 = Pattern.compile("([\\{|\\(])([^\\}\\)]+)([\\{|\\(])"); Pattern pattern2 = Pattern.compile("([\\}|\\)])([^\\{\\(]+)([\\}|\\)])"); Pattern pattern3 = Pattern.compile("([\\{|\\(])([^\\{\\(\\}\\)]+)([\\}|\\)])"); Pattern patternURL = Pattern.compile("(url)(\\s*[=|:]\\s*)([^;\\s]*)(,|;|\\r\\n|\\t)"); Pattern patternName = Pattern.compile("(id)(\\s*[=|:]\\s*)([^;\\s]*)(,|;|\\r\\n|\\t)"); Pattern patternPort = Pattern.compile("(port)(\\s*[=|:]\\s*)([^;\\s]*)(,|;|\\r\\n|\\t)"); Pattern patternIp = Pattern.compile("(ip)(\\s*[=|:]\\s*)([^;\\s]*)(,|;|\\r\\n|\\t)"); Pattern patternComponent = Pattern.compile("(\\s*)([^;,\\s]*)(\\s*)([,|;|\\r\\n|\\t])"); Matcher matcher1 = pattern1.matcher(input); Matcher matcher2 = pattern2.matcher(input); Matcher matcher3 = pattern3.matcher(input); String url=""; String ip=""; String name=""; int port=1111; String part1=""; String part2=""; String part3=""; String runtimeComponents=""; String machine=""; Boolean condition1=matcher1.find(); Boolean condition2=matcher2.find(); Boolean condition3=matcher3.find(); while (condition1||condition2||condition3) { url="https://localhost"; ip="localhost"; name=""; port=1111; part1=""; part2=""; part3=""; runtimeComponents=""; machine=""; if(condition1) part1=matcher1.group(2); if(condition2) part2=matcher2.group(2); if(condition3) part3=matcher3.group(2); if(condition1&&matcher3.end()>matcher1.end()) { machine=part1.toLowerCase()+part2.toLowerCase(); runtimeComponents=part3.toLowerCase()+";"; condition1=matcher1.find(); condition2=matcher2.find(); condition3=matcher3.find(); }else { machine=part3.toLowerCase(); condition3=matcher3.find(); } Matcher matcherURL = patternURL.matcher(machine); if(matcherURL.find()) url=matcherURL.group(3); Matcher matcherName = patternName.matcher(machine); if(matcherName.find()) name=matcherName.group(3); Matcher matcherIp = patternIp.matcher(machine); if(matcherIp.find()) ip=matcherIp.group(3); Matcher matcherPort = patternPort.matcher(machine); if(matcherPort.find()) port=Integer.parseInt(matcherPort.group(3)); UmpleNode aNode= new UmpleNode(Integer.parseInt(name)); Matcher matcherComponent = patternComponent.matcher(runtimeComponents); while(matcherComponent.find()) { String component=matcherComponent.group(2); UmpleComponent aComponent=new UmpleComponent(component,aNode); components.put(component,aComponent); } if(aNode.getId()==getThisNodeId()) { UmpleComponent aComponent=new UmpleComponent("local",aNode); components.put("local",aComponent); } aNode.setPort(port); aNode.setUrl(url); aNode.setIp(ip); nodes.put(aNode.getId(),aNode); } } } } } Registry rmiRegistry; public void initialize() { if(fileAddress.equals("")) readPropertiesFile(); readConfigFile(); numberOfNodes= nodes.size(); startRMI(); for(int node=0;node<numberOfNodes;node=node+1) { if(node==getThisNodeId()) { remoteFactories.add(this); } else { System.out.println("connecting to node: "+node); Boolean success=false; while(!success) { try { Registry registry = LocateRegistry.getRegistry(nodes.get(node).getIp(),nodes.get(node).getPort()); IUmpleRuntime stub = (IUmpleRuntime) registry.lookup("UmpleRuntime"+String.valueOf(node)); remoteFactories.add(stub); success=true; } catch (Exception e) { System.err.println("Client exception: " + e.toString()); e.printStackTrace(); try { Thread.sleep(5000); } catch (InterruptedException interruptedException) {}; } } } } } public void startRMI() { IUmpleRuntime stub; try { // Bind the remote object's stub in the registry rmiRegistry= LocateRegistry.createRegistry(nodes.get(getThisNodeId()).getPort()); stub = (IUmpleRuntime) UnicastRemoteObject.exportObject(this, nodes.get(getThisNodeId()).getPort()); rmiRegistry.bind("UmpleRuntime"+String.valueOf(getThisNodeId()), stub); System.err.println("Server ready"); } catch (Exception e) { System.err.println("binding exception: " + e.toString()); } } public void stopNode() { System.out.println("stopping node"); try { stopRMI(); } catch (Exception e) { System.err.println("Could not stop RMI: "+ e.toString()); } isAlive=false; } public void stopRMI() throws Exception { for(Object object: listOfObjects) { try { UnicastRemoteObject.unexportObject((Remote)object, true); } catch(Exception e) { throw e; } } try { UnicastRemoteObject.unexportObject(this, true); } catch(Exception e) { throw e; } } public void newClient(UmpleRuntime.UmpleComponent component,Client object) { while(true){ try {object.setRemoteObject(remoteFactories.get(getNodeId(component)).createClient()); object.setRealObject(object.getRemoteObject()); break; } catch(Exception e) { e.printStackTrace(); try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } } } public void newClient(Client object){ ClientRemote remoteObject; try{ remoteObject = (ClientRemote)Class.forName(object.getClass().getName()+"Remote").getConstructor(object.getClass()).newInstance(object); } catch (Exception e) { System.err.println("Class not found " + e.toString()); return; } listOfObjects.add(remoteObject); while(true) { try { UnicastRemoteObject.exportObject(remoteObject,nodes.get(getThisNodeId()).getPort()); object.setRemoteObject(remoteObject); break; } catch (Exception e) { System.err.println("Server Exception: " + e.toString()); try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } } } synchronized public IClientImpl createClient() { Client object= new Client( UmpleRuntime.getComponent("local")); return object.getRemoteObject(); } public void newMicrowave(int aX, String aF, UmpleRuntime.UmpleComponent component,Microwave object) { while(true){ try {object.setRemoteObject(remoteFactories.get(getNodeId(component)).createMicrowave(aX, aF)); object.setRealObject(object.getRemoteObject()); break; } catch(Exception e) { e.printStackTrace(); try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } } } public void newMicrowave(Microwave object){ MicrowaveRemote remoteObject; try{ remoteObject = (MicrowaveRemote)Class.forName(object.getClass().getName()+"Remote").getConstructor(object.getClass()).newInstance(object); } catch (Exception e) { System.err.println("Class not found " + e.toString()); return; } listOfObjects.add(remoteObject); while(true) { try { UnicastRemoteObject.exportObject(remoteObject,nodes.get(getThisNodeId()).getPort()); object.setRemoteObject(remoteObject); break; } catch (Exception e) { System.err.println("Server Exception: " + e.toString()); try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } } } synchronized public IMicrowaveImpl createMicrowave(int aX, String aF) { Microwave object= new Microwave(aX, aF, UmpleRuntime.getComponent("local")); return object.getRemoteObject(); } public static void main (String [] args) { if (args.length>0){ setThisNodeId(Integer.parseInt(args[0])); if (args.length>1) UmpleRuntime.setFileAddress(args[1]); } UmpleRuntime.getInstance(); while(isAlive){ try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } } public class UmpleNode { //------------------------ // MEMBER VARIABLES //------------------------ private int id; private String ip="localhost"; private String url="https://localhost"; private int port=1098; //------------------------ // CONSTRUCTOR //------------------------ public UmpleNode(int aId) { id= aId; } //------------------------ // INTERFACE //------------------------ public boolean setId(int aId) { boolean wasSet = false; id = aId; wasSet = true; return wasSet; } public boolean setIp(String aIp) { boolean wasSet = false; ip = aIp; wasSet = true; return wasSet; } public boolean setUrl(String aUrl) { boolean wasSet = false; url = aUrl; wasSet = true; return wasSet; } public boolean setPort(int aPort) { boolean wasSet = false; port = aPort; wasSet = true; return wasSet; } public int getId() { return id; } public String getIp() { return ip; } public String getUrl() { return url; } public int getPort() { return port; } public String toString() { return super.toString() + "["+"id" + ":" + getId()+ "]"; } } public class UmpleComponent { //------------------------ // MEMBER VARIABLES //------------------------ //UmpleComponent Attributes private int number=0; private String name; private UmpleNode node; //------------------------ // CONSTRUCTOR //------------------------ public UmpleComponent(String aName,UmpleNode aNode) { name=aName; node=aNode; } //------------------------ // INTERFACE //------------------------ public boolean setNumber(int aNumber) { boolean wasSet = false; number = aNumber; wasSet = true; return wasSet; } public boolean setName(String aName) { boolean wasSet = false; name = aName; wasSet = true; return wasSet; } public boolean setNode(UmpleNode aNode) { boolean wasSet = false; node = aNode; wasSet = true; return wasSet; } public UmpleNode getNode() { return node; } public int getNumber() { return number; } public String getName() { return name; } public boolean equals(Object object) { if(object instanceof UmpleComponent && ((UmpleComponent)object).getName() == this.name) { return true; } else { return false; } } } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package distributed.rmi3; import java.io.Serializable; // line 11 "../../Class_DistributableRMI3.ump" public class CC implements java.io.Serializable, ICCImpl { //------------------------ // MEMBER VARIABLES //------------------------ //------------------------ // CONSTRUCTOR //------------------------ public CC() {} //------------------------ // INTERFACE //------------------------ public void deleteImpl() {} // line 14 "../../Class_DistributableRMI3.ump" public void someMethod1Impl(){ } public void setRealObject(ICCImpl aObject) { realObject=aObject; } transient ICCImpl realObject=this; public void delete() { while(true) try{ realObject.deleteImpl(); break; } catch(Exception e) {System.err.println(e.toString());} } public void someMethod1() { while(true) try{ realObject.someMethod1Impl(); break; } catch(Exception e) {System.err.println(e.toString());} } protected ICCImpl remoteObject; public void setRemoteObject(ICCImpl aRemoteObject) { remoteObject=aRemoteObject; } public ICCImpl getRemoteObject() { return (ICCImpl)remoteObject; } private void readObject(java.io.ObjectInputStream in) throws Exception { try { in.defaultReadObject(); realObject=(ICCImpl)remoteObject; } catch(Exception e) { throw e; } } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceRMI0; import java.util.*; import java.io.Serializable; import java.rmi.registry.Registry; import java.rmi.registry.LocateRegistry; import java.rmi.server.UnicastRemoteObject; public class AgentRemote implements IAgentImpl { Agent realObject; public void setRealObject(Agent aObject) { realObject=aObject; } public AgentRemote() {} public AgentRemote(Agent aObject) { realObject=aObject; } public int getHashCodeImpl() { while(true) try{ return realObject.getHashCodeImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean setNameImpl(String aName) { while(true) try{ return realObject.setNameImpl(aName); } catch(Exception e) {System.err.println(e.toString());} } public String getNameImpl() { while(true) try{ return realObject.getNameImpl(); } catch(Exception e) {System.err.println(e.toString());} } public Warehouse getWarehousImpl(int index) { while(true) try{ return realObject.getWarehousImpl(index); } catch(Exception e) {System.err.println(e.toString());} } public List<Warehouse> getWarehousesImpl() { while(true) try{ return realObject.getWarehousesImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfWarehousesImpl() { while(true) try{ return realObject.numberOfWarehousesImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasWarehousesImpl() { while(true) try{ return realObject.hasWarehousesImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfWarehousImpl(Warehouse aWarehous) { while(true) try{ return realObject.indexOfWarehousImpl(aWarehous); } catch(Exception e) {System.err.println(e.toString());} } public SystemManager getSystemManagerImpl() { while(true) try{ return realObject.getSystemManagerImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasSystemManagerImpl() { while(true) try{ return realObject.hasSystemManagerImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean addWarehousImpl(Warehouse aWarehous) { while(true) try{ return realObject.addWarehousImpl(aWarehous); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeWarehousImpl(Warehouse aWarehous) { while(true) try{ return realObject.removeWarehousImpl(aWarehous); } catch(Exception e) {System.err.println(e.toString());} } public boolean addWarehousAtImpl(Warehouse aWarehous, int index) { while(true) try{ return realObject.addWarehousAtImpl(aWarehous,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveWarehousAtImpl(Warehouse aWarehous, int index) { while(true) try{ return realObject.addOrMoveWarehousAtImpl(aWarehous,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean setSystemManagerImpl(SystemManager aSystemManager) { while(true) try{ return realObject.setSystemManagerImpl(aSystemManager); } catch(Exception e) {System.err.println(e.toString());} } public void deleteImpl() { while(true) try{ realObject.deleteImpl(); break; } catch(Exception e) {System.err.println(e.toString());} } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package distributed.rmi5; // line 2 "../../Class_DistributableRMI5.ump" public interface ClientI { } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceWS; import java.util.*; import java.io.Serializable; import javax.xml.namespace.QName; import java.net.URL; import javax.xml.ws.Service; import javax.xml.ws.Endpoint; import javax.jws.WebService; import javax.xml.bind.Unmarshaller; import javax.xml.bind.annotation.*; // line 47 "../ecommerceWS.ump" @WebService(endpointInterface = "ecommerceWS.ISupplierImpl") @XmlAccessorType(XmlAccessType.FIELD) @XmlType(factoryMethod="umplenewInstance", propOrder={}) public class Supplier extends Agent implements java.io.Serializable, ISupplierImpl { //------------------------ // MEMBER VARIABLES //------------------------ //Supplier Associations private transient List<Warehouse> warehouses; private transient List<Product> products; //------------------------ // CONSTRUCTOR //------------------------ public Supplier(String aName, UmpleRuntime.UmpleComponent umpleComponent) { super(aName,umpleComponent); if(umpleComponent.getNode().getId()!=UmpleRuntime.getThisNodeId()) { if(this.getClass()== Supplier.class) UmpleRuntime.getInstance().newSupplier(aName, umpleComponent, this); return; } warehouses = new ArrayList<Warehouse>(); products = new ArrayList<Product>(); } //------------------------ // Returning the Hashcode //------------------------ public int getHashCodeImpl() { return hashCode(); } //------------------------ // INTERFACE //------------------------ /* Code from template association_GetMany */ public Warehouse getWarehousImpl(int index) { Warehouse aWarehous = warehouses.get(index); return aWarehous; } public List<Warehouse> getWarehouses() { List<Warehouse> newWarehouses = Collections.unmodifiableList(warehouses); return newWarehouses; } public int numberOfWarehousesImpl() { int number = warehouses.size(); return number; } public boolean hasWarehousesImpl() { boolean has = warehouses.size() > 0; return has; } public int indexOfWarehousImpl(Warehouse aWarehous) { int index = warehouses.indexOf(aWarehous); return index; } /* Code from template association_GetMany */ public Product getProductImpl(int index) { Product aProduct = products.get(index); return aProduct; } public List<Product> getProducts() { List<Product> newProducts = Collections.unmodifiableList(products); return newProducts; } public int numberOfProductsImpl() { int number = products.size(); return number; } public boolean hasProductsImpl() { boolean has = products.size() > 0; return has; } public int indexOfProductImpl(Product aProduct) { int index = products.indexOf(aProduct); return index; } /* Code from template association_MinimumNumberOfMethod */ public static int minimumNumberOfWarehouses() { return 0; } /* Code from template association_AddManyToManyMethod */ public boolean addWarehousImpl(Warehouse aWarehous) { boolean wasAdded = false; if (warehouses.contains(aWarehous)) { return false; } warehouses.add(aWarehous); if (aWarehous.indexOfSupplier(this) != -1) { wasAdded = true; } else { wasAdded = aWarehous.addSupplier(this); if (!wasAdded) { warehouses.remove(aWarehous); } } return wasAdded; } /* Code from template association_RemoveMany */ public boolean removeWarehousImpl(Warehouse aWarehous) { boolean wasRemoved = false; if (!warehouses.contains(aWarehous)) { return wasRemoved; } int oldIndex = warehouses.indexOf(aWarehous); warehouses.remove(oldIndex); if (aWarehous.indexOfSupplier(this) == -1) { wasRemoved = true; } else { wasRemoved = aWarehous.removeSupplier(this); if (!wasRemoved) { warehouses.add(oldIndex,aWarehous); } } return wasRemoved; } /* Code from template association_AddIndexControlFunctions */ public boolean addWarehousAtImpl(Warehouse aWarehous, int index) { boolean wasAdded = false; if(addWarehous(aWarehous)) { if(index < 0 ) { index = 0; } if(index > numberOfWarehouses()) { index = numberOfWarehouses() - 1; } warehouses.remove(aWarehous); warehouses.add(index, aWarehous); wasAdded = true; } return wasAdded; } public boolean addOrMoveWarehousAtImpl(Warehouse aWarehous, int index) { boolean wasAdded = false; if(warehouses.contains(aWarehous)) { if(index < 0 ) { index = 0; } if(index > numberOfWarehouses()) { index = numberOfWarehouses() - 1; } warehouses.remove(aWarehous); warehouses.add(index, aWarehous); wasAdded = true; } else { wasAdded = addWarehousAt(aWarehous, index); } return wasAdded; } /* Code from template association_MinimumNumberOfMethod */ public static int minimumNumberOfProducts() { return 0; } /* Code from template association_AddUnidirectionalMany */ public boolean addProductImpl(Product aProduct) { boolean wasAdded = false; if (products.contains(aProduct)) { return false; } products.add(aProduct); wasAdded = true; return wasAdded; } public boolean removeProductImpl(Product aProduct) { boolean wasRemoved = false; if (products.contains(aProduct)) { products.remove(aProduct); wasRemoved = true; } return wasRemoved; } /* Code from template association_AddIndexControlFunctions */ public boolean addProductAtImpl(Product aProduct, int index) { boolean wasAdded = false; if(addProduct(aProduct)) { if(index < 0 ) { index = 0; } if(index > numberOfProducts()) { index = numberOfProducts() - 1; } products.remove(aProduct); products.add(index, aProduct); wasAdded = true; } return wasAdded; } public boolean addOrMoveProductAtImpl(Product aProduct, int index) { boolean wasAdded = false; if(products.contains(aProduct)) { if(index < 0 ) { index = 0; } if(index > numberOfProducts()) { index = numberOfProducts() - 1; } products.remove(aProduct); products.add(index, aProduct); wasAdded = true; } else { wasAdded = addProductAt(aProduct, index); } return wasAdded; } public void deleteImpl() { ArrayList<Warehouse> copyOfWarehouses = new ArrayList<Warehouse>(warehouses); warehouses.clear(); for(Warehouse aWarehous : copyOfWarehouses) { aWarehous.removeSupplier(this); } products.clear(); super.delete(); } // line 54 "../ecommerceWS.ump" public Product createProductImpl(String serialNumber, String productType){ Product aProduct=new Product(serialNumber,new ProductType(productType)); addProduct(aProduct); return aProduct; } // line 60 "../ecommerceWS.ump" public void putInWarehouseImpl(Product aProduct, Warehouse warehouse){ warehouse.addProduct(aProduct); } transient ISupplierImpl realObject=this; public Supplier(String aName) { this(aName,UmpleRuntime.getComponent("Supplier")); } public int getHashCode() { while(true) try{ return realObject.getHashCodeImpl(); } catch(Exception e) {System.err.println(e.toString());} } public Warehouse getWarehous(int index) { while(true) try{ return realObject.getWarehousImpl(index); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfWarehouses() { while(true) try{ return realObject.numberOfWarehousesImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasWarehouses() { while(true) try{ return realObject.hasWarehousesImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfWarehous(Warehouse aWarehous) { while(true) try{ return realObject.indexOfWarehousImpl(aWarehous); } catch(Exception e) {System.err.println(e.toString());} } public Product getProduct(int index) { while(true) try{ return realObject.getProductImpl(index); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfProducts() { while(true) try{ return realObject.numberOfProductsImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasProducts() { while(true) try{ return realObject.hasProductsImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfProduct(Product aProduct) { while(true) try{ return realObject.indexOfProductImpl(aProduct); } catch(Exception e) {System.err.println(e.toString());} } public boolean addWarehous(Warehouse aWarehous) { while(true) try{ return realObject.addWarehousImpl(aWarehous); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeWarehous(Warehouse aWarehous) { while(true) try{ return realObject.removeWarehousImpl(aWarehous); } catch(Exception e) {System.err.println(e.toString());} } public boolean addWarehousAt(Warehouse aWarehous, int index) { while(true) try{ return realObject.addWarehousAtImpl(aWarehous,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveWarehousAt(Warehouse aWarehous, int index) { while(true) try{ return realObject.addOrMoveWarehousAtImpl(aWarehous,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addProduct(Product aProduct) { while(true) try{ return realObject.addProductImpl(aProduct); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeProduct(Product aProduct) { while(true) try{ return realObject.removeProductImpl(aProduct); } catch(Exception e) {System.err.println(e.toString());} } public boolean addProductAt(Product aProduct, int index) { while(true) try{ return realObject.addProductAtImpl(aProduct,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveProductAt(Product aProduct, int index) { while(true) try{ return realObject.addOrMoveProductAtImpl(aProduct,index); } catch(Exception e) {System.err.println(e.toString());} } public void delete() { while(true) try{ realObject.deleteImpl(); break; } catch(Exception e) {System.err.println(e.toString());} } public Product createProduct(String serialNumber, String productType) { while(true) try{ return realObject.createProductImpl(serialNumber,productType); } catch(Exception e) {System.err.println(e.toString());} } public void putInWarehouse(Product aProduct, Warehouse warehouse) { while(true) try{ realObject.putInWarehouseImpl(aProduct,warehouse); break; } catch(Exception e) {System.err.println(e.toString());} } private static Supplier umplenewInstance() { return new Supplier((UmpleRuntime.UmpleNode)null); } protected Supplier (UmpleRuntime.UmpleNode node) { super(node); } public void setRealObject(ISupplierImpl aObject) { super.setRealObject(aObject); realObject=aObject; } void afterUnmarshal(Unmarshaller u, Object parent) { initializeConnection(); } private void initializeConnection() { if(objectId.contains(Supplier.class.getName())) { boolean success = false; while (!success) { try { URL url = new URL(remoteUrl+":"+remotePort+"/Supplier"+objectId+"?wsdl"); QName qname = new QName("https://ecommerceWS/","SupplierService"); Service service = Service.create(url, qname); setRealObject(service.getPort(ISupplierImpl.class)); success = true; } catch (Exception e) { System.err.println("Client exception: " + e.toString()); e.printStackTrace(); try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } } } } public boolean equals(Object obj) { if(obj.getClass()!=this.getClass()) return false; return (getHashCode()==((Supplier)obj).getHashCode()); } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceWS; import java.io.Serializable; import javax.xml.namespace.QName; import java.net.URL; import javax.xml.ws.Service; import javax.xml.ws.Endpoint; import javax.jws.WebService; import javax.xml.bind.Unmarshaller; import javax.xml.bind.annotation.*; import javax.jws.WebMethod; import javax.jws.WebService; import javax.jws.soap.SOAPBinding; import javax.jws.soap.SOAPBinding.Style; import java.rmi.RemoteException; @WebService @SOAPBinding(style = Style.RPC) public interface IAgentImpl { @WebMethod public int getHashCodeImpl(); @WebMethod public boolean setNameImpl(String aName); @WebMethod public String getNameImpl(); @WebMethod public SystemManager getSystemManagerImpl(); @WebMethod public boolean hasSystemManagerImpl(); @WebMethod public boolean setSystemManagerImpl(SystemManager aSystemManager); @WebMethod public void deleteImpl(); } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package distributed.rmi.withMethods; import java.util.*; import java.lang.Thread; import java.io.Serializable; import java.rmi.registry.Registry; import java.rmi.registry.LocateRegistry; import java.rmi.server.UnicastRemoteObject; public class MicrowaveRemote implements IMicrowaveImpl { Microwave realObject; public void setRealObject(Microwave aObject) { realObject=aObject; } public MicrowaveRemote() {} public MicrowaveRemote(Microwave aObject) { realObject=aObject; } public int getHashCodeImpl() { while(true) try{ return realObject.getHashCodeImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean setLightOnImpl(boolean aLightOn) { while(true) try{ return realObject.setLightOnImpl(aLightOn); } catch(Exception e) {System.err.println(e.toString());} } public boolean setPowerTubeOnImpl(boolean aPowerTubeOn) { while(true) try{ return realObject.setPowerTubeOnImpl(aPowerTubeOn); } catch(Exception e) {System.err.println(e.toString());} } public boolean setIsDoorOpenedImpl(boolean aIsDoorOpened) { while(true) try{ return realObject.setIsDoorOpenedImpl(aIsDoorOpened); } catch(Exception e) {System.err.println(e.toString());} } public boolean setIsButtonPressedImpl(boolean aIsButtonPressed) { while(true) try{ return realObject.setIsButtonPressedImpl(aIsButtonPressed); } catch(Exception e) {System.err.println(e.toString());} } public boolean getLightOnImpl() { while(true) try{ return realObject.getLightOnImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean getPowerTubeOnImpl() { while(true) try{ return realObject.getPowerTubeOnImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean getIsDoorOpenedImpl() { while(true) try{ return realObject.getIsDoorOpenedImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean getIsButtonPressedImpl() { while(true) try{ return realObject.getIsButtonPressedImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean _doorOpenedImpl() { while(true) try{ return realObject._doorOpenedImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean _buttonPressedImpl() { while(true) try{ return realObject._buttonPressedImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean _doorClosedImpl() { while(true) try{ return realObject._doorClosedImpl(); } catch(Exception e) {System.err.println(e.toString());} } public void deleteImpl() { while(true) try{ realObject.deleteImpl(); break; } catch(Exception e) {System.err.println(e.toString());} } public void doorOpenedImpl () { while(true) try{ realObject.doorOpenedImpl(); break; } catch(Exception e) {System.err.println(e.toString());} } public void buttonPressedImpl () { while(true) try{ realObject.buttonPressedImpl(); break; } catch(Exception e) {System.err.println(e.toString());} } public void doorClosedImpl () { while(true) try{ realObject.doorClosedImpl(); break; } catch(Exception e) {System.err.println(e.toString());} } public void runImpl () { while(true) try{ realObject.runImpl(); break; } catch(Exception e) {System.err.println(e.toString());} } public void turnLightOnImpl(boolean on) { while(true) try{ realObject.turnLightOnImpl(on); break; } catch(Exception e) {System.err.println(e.toString());} } public void energizePowerTubeImpl(boolean on) { while(true) try{ realObject.energizePowerTubeImpl(on); break; } catch(Exception e) {System.err.println(e.toString());} } public void turnOffImpl() { while(true) try{ realObject.turnOffImpl(); break; } catch(Exception e) {System.err.println(e.toString());} } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package distributed.rmi5; import java.util.*; import java.io.Serializable; import java.rmi.RemoteException; public interface IMicrowaveImpl extends java.rmi.Remote { public int getHashCodeImpl() throws RemoteException; public boolean setXImpl(int aX) throws RemoteException; public boolean setFImpl(String aF) throws RemoteException; public int getXImpl() throws RemoteException; public String getFImpl() throws RemoteException; public Client getClientImpl(int index) throws RemoteException; public List<Client> getClientsImpl() throws RemoteException; public int numberOfClientsImpl() throws RemoteException; public boolean hasClientsImpl() throws RemoteException; public int indexOfClientImpl(Client aClient) throws RemoteException; public boolean addClientImpl(Client aClient) throws RemoteException; public boolean removeClientImpl(Client aClient) throws RemoteException; public boolean addClientAtImpl(Client aClient, int index) throws RemoteException; public boolean addOrMoveClientAtImpl(Client aClient, int index) throws RemoteException; public void deleteImpl() throws RemoteException; } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package distributed.rmi.withMethods2; import java.rmi.RemoteException; public interface ICCImpl extends java.rmi.Remote { public void setSelf(CC proxy) throws RemoteException; public int getHashCode() throws RemoteException; public void delete() throws RemoteException; public void energizePowerTube(boolean on) throws RemoteException; public void turnOff() throws RemoteException; } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceRMI1; import java.rmi.Remote; import java.util.Properties; import ecommerceRMI1.Agent; import java.io.*; import ecommerceRMI1.Vendor; import ecommerceRMI1.Warehouse; import java.io.IOException; import java.io.FileInputStream; import java.rmi.registry.Registry; import java.io.InputStreamReader; import java.io.File; import java.rmi.RemoteException; import java.io.Serializable; import ecommerceRMI1.Customer; import java.util.regex.Matcher; import java.rmi.registry.LocateRegistry; import java.util.*; import ecommerceRMI1.Supplier; import java.rmi.server.UnicastRemoteObject; import ecommerceRMI1.SystemManager; import java.io.BufferedReader; import java.io.FileReader; import java.util.regex.Pattern; import java.io.InputStream; public class UmpleRuntime implements IUmpleRuntime { private static Boolean isAlive = true; static int thisNodeId=-1; private int numberOfNodes=0; private static String fileAddress=""; static HashMap<Integer, UmpleNode> nodes=new HashMap<Integer, UmpleNode>(); static HashMap <String, UmpleComponent> components= new HashMap<String, UmpleComponent>(); public static void setFileAddress(String address) { fileAddress=address; } public static int getThisNodeId() { return thisNodeId; } private static void setThisNodeId(int id) { thisNodeId=id; } private static void readPropertiesFile() { String location="configuration.txt"; Properties prop = new Properties(); InputStream input = null; try { input = new FileInputStream("node.properties"); prop.load(input); if(getThisNodeId()<0) setThisNodeId(Integer.parseInt(prop.getProperty("name"))); location=prop.getProperty("location"); setFileAddress(location); } catch (IOException e) { e.printStackTrace(); if(getThisNodeId()<0) setThisNodeId(0); setFileAddress(location); } finally { if (input != null) { try { input.close(); } catch (IOException e) { e.printStackTrace(); } } } } public static UmpleComponent getComponent(String runtimeComponentName) { getInstance(); UmpleComponent aComponent=components.get(runtimeComponentName.toLowerCase()); if (aComponent!=null) return aComponent; else return components.get("local"); } public static void stopAll() { UmpleRuntime.getInstance().stopAllNodes(); } public void stopAllNodes() { for(int node=0;node<numberOfNodes;node=node+1) { if(node!=getThisNodeId()) { try { remoteFactories.get(node).stopNode(); } catch(Exception e) {System.err.println(e.toString());} } } stopNode(); } // ******************************** Factory public static UmpleRuntime theInstance = null; List<IUmpleRuntime> remoteFactories; public List<Object> listOfObjects; public static UmpleRuntime getInstance() { if(theInstance==null){ theInstance = new UmpleRuntime(); } return theInstance; } private UmpleRuntime() { listOfObjects=new ArrayList<Object>(); remoteFactories= new ArrayList<IUmpleRuntime>(); initialize(); } public int getNodeId(int umpleNodeId) { int nodeId=umpleNodeId; if(nodeId>=numberOfNodes) nodeId=numberOfNodes-1; return nodeId; } public int getNodeId(UmpleComponent umpleComponent) { return umpleComponent.getNode().getId(); } private void readConfigFile() { String input="{id=0; port=1099; https://localhost {component1}}{id=1; port=1700; https://localhost {component2}}"; try (BufferedReader br = new BufferedReader(new FileReader(fileAddress))) { input=""; String line; while ((line = br.readLine()) != null) { // Merging the lines input+=line+";"; } } catch (IOException e) { e.printStackTrace(); } finally { if (input != null) { int startIndex=input.indexOf("{"); if(startIndex>=0) //while(startIndex>=0) { Pattern pattern1 = Pattern.compile("([\\{|\\(])([^\\}\\)]+)([\\{|\\(])"); Pattern pattern2 = Pattern.compile("([\\}|\\)])([^\\{\\(]+)([\\}|\\)])"); Pattern pattern3 = Pattern.compile("([\\{|\\(])([^\\{\\(\\}\\)]+)([\\}|\\)])"); Pattern patternURL = Pattern.compile("(url)(\\s*[=|:]\\s*)([^;\\s]*)(,|;|\\r\\n|\\t)"); Pattern patternName = Pattern.compile("(id)(\\s*[=|:]\\s*)([^;\\s]*)(,|;|\\r\\n|\\t)"); Pattern patternPort = Pattern.compile("(port)(\\s*[=|:]\\s*)([^;\\s]*)(,|;|\\r\\n|\\t)"); Pattern patternIp = Pattern.compile("(ip)(\\s*[=|:]\\s*)([^;\\s]*)(,|;|\\r\\n|\\t)"); Pattern patternComponent = Pattern.compile("(\\s*)([^;,\\s]*)(\\s*)([,|;|\\r\\n|\\t])"); Matcher matcher1 = pattern1.matcher(input); Matcher matcher2 = pattern2.matcher(input); Matcher matcher3 = pattern3.matcher(input); String url=""; String ip=""; String name=""; int port=1111; String part1=""; String part2=""; String part3=""; String runtimeComponents=""; String machine=""; Boolean condition1=matcher1.find(); Boolean condition2=matcher2.find(); Boolean condition3=matcher3.find(); while (condition1||condition2||condition3) { url="https://localhost"; ip="localhost"; name=""; port=1111; part1=""; part2=""; part3=""; runtimeComponents=""; machine=""; if(condition1) part1=matcher1.group(2); if(condition2) part2=matcher2.group(2); if(condition3) part3=matcher3.group(2); if(condition1&&matcher3.end()>matcher1.end()) { machine=part1.toLowerCase()+part2.toLowerCase(); runtimeComponents=part3.toLowerCase()+";"; condition1=matcher1.find(); condition2=matcher2.find(); condition3=matcher3.find(); }else { machine=part3.toLowerCase(); condition3=matcher3.find(); } Matcher matcherURL = patternURL.matcher(machine); if(matcherURL.find()) url=matcherURL.group(3); Matcher matcherName = patternName.matcher(machine); if(matcherName.find()) name=matcherName.group(3); Matcher matcherIp = patternIp.matcher(machine); if(matcherIp.find()) ip=matcherIp.group(3); Matcher matcherPort = patternPort.matcher(machine); if(matcherPort.find()) port=Integer.parseInt(matcherPort.group(3)); UmpleNode aNode= new UmpleNode(Integer.parseInt(name)); Matcher matcherComponent = patternComponent.matcher(runtimeComponents); while(matcherComponent.find()) { String component=matcherComponent.group(2); UmpleComponent aComponent=new UmpleComponent(component,aNode); components.put(component,aComponent); } if(aNode.getId()==getThisNodeId()) { UmpleComponent aComponent=new UmpleComponent("local",aNode); components.put("local",aComponent); } aNode.setPort(port); aNode.setUrl(url); aNode.setIp(ip); nodes.put(aNode.getId(),aNode); } } } } } Registry rmiRegistry; public void initialize() { if(fileAddress.equals("")) readPropertiesFile(); readConfigFile(); numberOfNodes= nodes.size(); startRMI(); for(int node=0;node<numberOfNodes;node=node+1) { if(node==getThisNodeId()) { remoteFactories.add(this); } else { System.out.println("connecting to node: "+node); Boolean success=false; while(!success) { try { Registry registry = LocateRegistry.getRegistry(nodes.get(node).getIp(),nodes.get(node).getPort()); IUmpleRuntime stub = (IUmpleRuntime) registry.lookup("UmpleRuntime"+String.valueOf(node)); remoteFactories.add(stub); success=true; } catch (Exception e) { System.err.println("Client exception: " + e.toString()); e.printStackTrace(); try { Thread.sleep(5000); } catch (InterruptedException interruptedException) {}; } } } } } public void startRMI() { IUmpleRuntime stub; try { // Bind the remote object's stub in the registry rmiRegistry= LocateRegistry.createRegistry(nodes.get(getThisNodeId()).getPort()); stub = (IUmpleRuntime) UnicastRemoteObject.exportObject(this, nodes.get(getThisNodeId()).getPort()); rmiRegistry.bind("UmpleRuntime"+String.valueOf(getThisNodeId()), stub); System.err.println("Server ready"); } catch (Exception e) { System.err.println("binding exception: " + e.toString()); } } public void stopNode() { System.out.println("stopping node"); try { stopRMI(); } catch (Exception e) { System.err.println("Could not stop RMI: "+ e.toString()); } isAlive=false; } public void stopRMI() throws Exception { for(Object object: listOfObjects) { try { UnicastRemoteObject.unexportObject((Remote)object, true); } catch(Exception e) { throw e; } } try { UnicastRemoteObject.unexportObject(this, true); } catch(Exception e) { throw e; } } public IWarehouseImpl newWarehouse(String aName, Warehouse proxy) { return newWarehouse(aName, getComponent("Warehouse"),proxy); } public IWarehouseImpl newWarehouse(String aName, UmpleRuntime.UmpleComponent component, Warehouse proxy) { while(true){ try { return remoteFactories.get(getNodeId(component)).createWarehouse(aName, proxy); } catch(Exception e) { e.printStackTrace(); try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } } } public IWarehouseImpl createWarehouse(String aName, Warehouse proxy) { WarehouseImpl object = new WarehouseImpl(aName); object.setSelf(proxy); proxy.setRealObject(object); try { UnicastRemoteObject.exportObject(object,0); } catch (Exception e) { System.err.println("Server Exception: " + e.toString()); try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } listOfObjects.add(object); return object; } public IAgentImpl newAgent(String aName, Agent proxy) { return newAgent(aName, getComponent("Agent"),proxy); } public IAgentImpl newAgent(String aName, UmpleRuntime.UmpleComponent component, Agent proxy) { while(true){ try { return remoteFactories.get(getNodeId(component)).createAgent(aName, proxy); } catch(Exception e) { e.printStackTrace(); try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } } } public IAgentImpl createAgent(String aName, Agent proxy) { AgentImpl object = new AgentImpl(aName); object.setSelf(proxy); proxy.setRealObject(object); try { UnicastRemoteObject.exportObject(object,0); } catch (Exception e) { System.err.println("Server Exception: " + e.toString()); try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } listOfObjects.add(object); return object; } public ISupplierImpl newSupplier(String aName, Supplier proxy) { return newSupplier(aName, getComponent("Supplier"),proxy); } public ISupplierImpl newSupplier(String aName, UmpleRuntime.UmpleComponent component, Supplier proxy) { while(true){ try { return remoteFactories.get(getNodeId(component)).createSupplier(aName, proxy); } catch(Exception e) { e.printStackTrace(); try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } } } public ISupplierImpl createSupplier(String aName, Supplier proxy) { SupplierImpl object = new SupplierImpl(aName); object.setSelf(proxy); proxy.setRealObject(object); try { UnicastRemoteObject.exportObject(object,0); } catch (Exception e) { System.err.println("Server Exception: " + e.toString()); try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } listOfObjects.add(object); return object; } public IVendorImpl newVendor(String aName, Vendor proxy) { return newVendor(aName, getComponent("Vendor"),proxy); } public IVendorImpl newVendor(String aName, UmpleRuntime.UmpleComponent component, Vendor proxy) { while(true){ try { return remoteFactories.get(getNodeId(component)).createVendor(aName, proxy); } catch(Exception e) { e.printStackTrace(); try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } } } public IVendorImpl createVendor(String aName, Vendor proxy) { VendorImpl object = new VendorImpl(aName); object.setSelf(proxy); proxy.setRealObject(object); try { UnicastRemoteObject.exportObject(object,0); } catch (Exception e) { System.err.println("Server Exception: " + e.toString()); try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } listOfObjects.add(object); return object; } public ICustomerImpl newCustomer(String aName, Customer proxy) { return newCustomer(aName, getComponent("Customer"),proxy); } public ICustomerImpl newCustomer(String aName, UmpleRuntime.UmpleComponent component, Customer proxy) { while(true){ try { return remoteFactories.get(getNodeId(component)).createCustomer(aName, proxy); } catch(Exception e) { e.printStackTrace(); try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } } } public ICustomerImpl createCustomer(String aName, Customer proxy) { CustomerImpl object = new CustomerImpl(aName); object.setSelf(proxy); proxy.setRealObject(object); try { UnicastRemoteObject.exportObject(object,0); } catch (Exception e) { System.err.println("Server Exception: " + e.toString()); try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } listOfObjects.add(object); return object; } public ISystemManagerImpl newSystemManager(SystemManager proxy) { return newSystemManager(getComponent("SystemManager"),proxy); } public ISystemManagerImpl newSystemManager(UmpleRuntime.UmpleComponent component, SystemManager proxy) { while(true){ try { return remoteFactories.get(getNodeId(component)).createSystemManager(proxy); } catch(Exception e) { e.printStackTrace(); try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } } } public ISystemManagerImpl createSystemManager(SystemManager proxy) { SystemManagerImpl object= SystemManagerImpl.getInstance(); object.setSelf(proxy); proxy.setRealObject(object); try { UnicastRemoteObject.exportObject(object,0); } catch (Exception e) { System.err.println("Server Exception: " + e.toString()); try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } listOfObjects.add(object); return object; } public static void main (String [] args) { if (args.length>0){ setThisNodeId(Integer.parseInt(args[0])); if (args.length>1) UmpleRuntime.setFileAddress(args[1]); } UmpleRuntime.getInstance(); while(isAlive){ try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } } public class UmpleNode { //------------------------ // MEMBER VARIABLES //------------------------ private int id; private String ip="localhost"; private String url="https://localhost"; private int port=1098; //------------------------ // CONSTRUCTOR //------------------------ public UmpleNode(int aId) { id= aId; } //------------------------ // INTERFACE //------------------------ public boolean setId(int aId) { boolean wasSet = false; id = aId; wasSet = true; return wasSet; } public boolean setIp(String aIp) { boolean wasSet = false; ip = aIp; wasSet = true; return wasSet; } public boolean setUrl(String aUrl) { boolean wasSet = false; url = aUrl; wasSet = true; return wasSet; } public boolean setPort(int aPort) { boolean wasSet = false; port = aPort; wasSet = true; return wasSet; } public int getId() { return id; } public String getIp() { return ip; } public String getUrl() { return url; } public int getPort() { return port; } public String toString() { return super.toString() + "["+"id" + ":" + getId()+ "]"; } } public class UmpleComponent { //------------------------ // MEMBER VARIABLES //------------------------ //UmpleComponent Attributes private int number=0; private String name; private UmpleNode node; //------------------------ // CONSTRUCTOR //------------------------ public UmpleComponent(String aName,UmpleNode aNode) { name=aName; node=aNode; } //------------------------ // INTERFACE //------------------------ public boolean setNumber(int aNumber) { boolean wasSet = false; number = aNumber; wasSet = true; return wasSet; } public boolean setName(String aName) { boolean wasSet = false; name = aName; wasSet = true; return wasSet; } public boolean setNode(UmpleNode aNode) { boolean wasSet = false; node = aNode; wasSet = true; return wasSet; } public UmpleNode getNode() { return node; } public int getNumber() { return number; } public String getName() { return name; } public boolean equals(Object object) { if(object instanceof UmpleComponent && ((UmpleComponent)object).getName() == this.name) { return true; } else { return false; } } } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceRMI1; import java.util.*; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; import java.rmi.RemoteException; import java.io.Serializable; import ecommerceRMI1.UmpleRuntime; public class SystemManager implements java.io.Serializable { public void setRealObject(ISystemManagerImpl aObject) { realObject=aObject; } ISystemManagerImpl realObject; private SystemManager(UmpleRuntime.UmpleComponent component) { if(this.getClass()== SystemManager.class) setRealObject(UmpleRuntime.getInstance().newSystemManager(component, this)); } private SystemManager() { if(this.getClass()== SystemManager.class) setRealObject(UmpleRuntime.getInstance().newSystemManager(this)); } public void setSelf(SystemManager proxy) { while(true) try{ realObject.setSelf(proxy); break; } catch(Exception e) {System.err.println(e.toString());} } public int getHashCode() { while(true) try{ return realObject.getHashCode(); } catch(Exception e) {System.err.println(e.toString());} } public Agent getAgent(int index) { while(true) try{ return realObject.getAgent(index); } catch(Exception e) {System.err.println(e.toString());} } public List<Agent> getAgents() { while(true) try{ return realObject.getAgents(); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfAgents() { while(true) try{ return realObject.numberOfAgents(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasAgents() { while(true) try{ return realObject.hasAgents(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfAgent(Agent aAgent) { while(true) try{ return realObject.indexOfAgent(aAgent); } catch(Exception e) {System.err.println(e.toString());} } public Warehouse getWarehous(int index) { while(true) try{ return realObject.getWarehous(index); } catch(Exception e) {System.err.println(e.toString());} } public List<Warehouse> getWarehouses() { while(true) try{ return realObject.getWarehouses(); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfWarehouses() { while(true) try{ return realObject.numberOfWarehouses(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasWarehouses() { while(true) try{ return realObject.hasWarehouses(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfWarehous(Warehouse aWarehous) { while(true) try{ return realObject.indexOfWarehous(aWarehous); } catch(Exception e) {System.err.println(e.toString());} } public Customer getCustomer(int index) { while(true) try{ return realObject.getCustomer(index); } catch(Exception e) {System.err.println(e.toString());} } public List<Customer> getCustomers() { while(true) try{ return realObject.getCustomers(); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfCustomers() { while(true) try{ return realObject.numberOfCustomers(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasCustomers() { while(true) try{ return realObject.hasCustomers(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfCustomer(Customer aCustomer) { while(true) try{ return realObject.indexOfCustomer(aCustomer); } catch(Exception e) {System.err.println(e.toString());} } public Order getOrder(int index) { while(true) try{ return realObject.getOrder(index); } catch(Exception e) {System.err.println(e.toString());} } public List<Order> getOrders() { while(true) try{ return realObject.getOrders(); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfOrders() { while(true) try{ return realObject.numberOfOrders(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasOrders() { while(true) try{ return realObject.hasOrders(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfOrder(Order aOrder) { while(true) try{ return realObject.indexOfOrder(aOrder); } catch(Exception e) {System.err.println(e.toString());} } public static int minimumNumberOfAgents() { while(true) try{ return SystemManagerImpl.minimumNumberOfAgents(); } catch(Exception e) {System.err.println(e.toString());} } public boolean addAgent(Agent aAgent) { while(true) try{ return realObject.addAgent(aAgent); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeAgent(Agent aAgent) { while(true) try{ return realObject.removeAgent(aAgent); } catch(Exception e) {System.err.println(e.toString());} } public boolean addAgentAt(Agent aAgent, int index) { while(true) try{ return realObject.addAgentAt(aAgent,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveAgentAt(Agent aAgent, int index) { while(true) try{ return realObject.addOrMoveAgentAt(aAgent,index); } catch(Exception e) {System.err.println(e.toString());} } public static int minimumNumberOfWarehouses() { while(true) try{ return SystemManagerImpl.minimumNumberOfWarehouses(); } catch(Exception e) {System.err.println(e.toString());} } public boolean addWarehous(Warehouse aWarehous) { while(true) try{ return realObject.addWarehous(aWarehous); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeWarehous(Warehouse aWarehous) { while(true) try{ return realObject.removeWarehous(aWarehous); } catch(Exception e) {System.err.println(e.toString());} } public boolean addWarehousAt(Warehouse aWarehous, int index) { while(true) try{ return realObject.addWarehousAt(aWarehous,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveWarehousAt(Warehouse aWarehous, int index) { while(true) try{ return realObject.addOrMoveWarehousAt(aWarehous,index); } catch(Exception e) {System.err.println(e.toString());} } public static int minimumNumberOfCustomers() { while(true) try{ return SystemManagerImpl.minimumNumberOfCustomers(); } catch(Exception e) {System.err.println(e.toString());} } public boolean addCustomer(Customer aCustomer) { while(true) try{ return realObject.addCustomer(aCustomer); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeCustomer(Customer aCustomer) { while(true) try{ return realObject.removeCustomer(aCustomer); } catch(Exception e) {System.err.println(e.toString());} } public boolean addCustomerAt(Customer aCustomer, int index) { while(true) try{ return realObject.addCustomerAt(aCustomer,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveCustomerAt(Customer aCustomer, int index) { while(true) try{ return realObject.addOrMoveCustomerAt(aCustomer,index); } catch(Exception e) {System.err.println(e.toString());} } public static int minimumNumberOfOrders() { while(true) try{ return SystemManagerImpl.minimumNumberOfOrders(); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrder(Order aOrder) { while(true) try{ return realObject.addOrder(aOrder); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeOrder(Order aOrder) { while(true) try{ return realObject.removeOrder(aOrder); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrderAt(Order aOrder, int index) { while(true) try{ return realObject.addOrderAt(aOrder,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveOrderAt(Order aOrder, int index) { while(true) try{ return realObject.addOrMoveOrderAt(aOrder,index); } catch(Exception e) {System.err.println(e.toString());} } public void delete() { while(true) try{ realObject.delete(); break; } catch(Exception e) {System.err.println(e.toString());} } public boolean equals(Object obj) { if(obj.getClass()!=this.getClass()) return false; return (getHashCode()==((SystemManager)obj).getHashCode()); } private static SystemManager theInstance=null; public static SystemManager getInstance() { if(theInstance == null) { theInstance = new SystemManager(); } return theInstance; } public static SystemManager getInstance(UmpleRuntime.UmpleComponent umpleComponent) { if(theInstance == null) { theInstance = new SystemManager(umpleComponent); } return theInstance; } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceRMI1; import java.util.*; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; import java.rmi.RemoteException; import java.io.Serializable; import ecommerceRMI1.UmpleRuntime; public class Supplier extends Agent implements java.io.Serializable { public void setRealObject(ISupplierImpl aObject) { super.setRealObject(aObject); realObject=aObject; } ISupplierImpl realObject; public Supplier(String aName, UmpleRuntime.UmpleComponent component) { if(this.getClass()== Supplier.class) setRealObject(UmpleRuntime.getInstance().newSupplier(aName, component, this)); } public Supplier(String aName) { if(this.getClass()== Supplier.class) setRealObject(UmpleRuntime.getInstance().newSupplier(aName, this)); } public void setSelf(Supplier proxy) { while(true) try{ realObject.setSelf(proxy); break; } catch(Exception e) {System.err.println(e.toString());} } public int getHashCode() { while(true) try{ return realObject.getHashCode(); } catch(Exception e) {System.err.println(e.toString());} } public Product getProduct(int index) { while(true) try{ return realObject.getProduct(index); } catch(Exception e) {System.err.println(e.toString());} } public List<Product> getProducts() { while(true) try{ return realObject.getProducts(); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfProducts() { while(true) try{ return realObject.numberOfProducts(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasProducts() { while(true) try{ return realObject.hasProducts(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfProduct(Product aProduct) { while(true) try{ return realObject.indexOfProduct(aProduct); } catch(Exception e) {System.err.println(e.toString());} } public static int minimumNumberOfProducts() { while(true) try{ return SupplierImpl.minimumNumberOfProducts(); } catch(Exception e) {System.err.println(e.toString());} } public boolean addProduct(Product aProduct) { while(true) try{ return realObject.addProduct(aProduct); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeProduct(Product aProduct) { while(true) try{ return realObject.removeProduct(aProduct); } catch(Exception e) {System.err.println(e.toString());} } public boolean addProductAt(Product aProduct, int index) { while(true) try{ return realObject.addProductAt(aProduct,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveProductAt(Product aProduct, int index) { while(true) try{ return realObject.addOrMoveProductAt(aProduct,index); } catch(Exception e) {System.err.println(e.toString());} } public void delete() { while(true) try{ realObject.delete(); break; } catch(Exception e) {System.err.println(e.toString());} } public Product createProduct(String serialNumber, String productType) { while(true) try{ return realObject.createProduct(serialNumber,productType); } catch(Exception e) {System.err.println(e.toString());} } public void putInWarehouse(Product aProduct, Warehouse warehouse) { while(true) try{ realObject.putInWarehouse(aProduct,warehouse); break; } catch(Exception e) {System.err.println(e.toString());} } public boolean equals(Object obj) { if(obj.getClass()!=this.getClass()) return false; return (getHashCode()==((Supplier)obj).getHashCode()); } protected Supplier(){} } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceWS; import java.util.*; import java.io.Serializable; import javax.xml.namespace.QName; import java.net.URL; import javax.xml.ws.Service; import javax.xml.ws.Endpoint; import javax.jws.WebService; import javax.xml.bind.Unmarshaller; import javax.xml.bind.annotation.*; import javax.jws.WebMethod; import javax.jws.WebService; import javax.jws.soap.SOAPBinding; import javax.jws.soap.SOAPBinding.Style; import java.rmi.RemoteException; @WebService @SOAPBinding(style = Style.RPC) public interface ISupplierImpl extends IAgentImpl { @WebMethod public int getHashCodeImpl(); @WebMethod public Warehouse getWarehousImpl(int index); @WebMethod public int numberOfWarehousesImpl(); @WebMethod public boolean hasWarehousesImpl(); @WebMethod public int indexOfWarehousImpl(Warehouse aWarehous); @WebMethod public Product getProductImpl(int index); @WebMethod public int numberOfProductsImpl(); @WebMethod public boolean hasProductsImpl(); @WebMethod public int indexOfProductImpl(Product aProduct); @WebMethod public boolean addWarehousImpl(Warehouse aWarehous); @WebMethod public boolean removeWarehousImpl(Warehouse aWarehous); @WebMethod public boolean addWarehousAtImpl(Warehouse aWarehous, int index); @WebMethod public boolean addOrMoveWarehousAtImpl(Warehouse aWarehous, int index); @WebMethod public boolean addProductImpl(Product aProduct); @WebMethod public boolean removeProductImpl(Product aProduct); @WebMethod public boolean addProductAtImpl(Product aProduct, int index); @WebMethod public boolean addOrMoveProductAtImpl(Product aProduct, int index); @WebMethod public void deleteImpl(); @WebMethod public Product createProductImpl(String serialNumber, String productType); @WebMethod public void putInWarehouseImpl(Product aProduct, Warehouse warehouse); } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceRMI0; import java.util.*; import java.io.Serializable; import java.rmi.registry.Registry; import java.rmi.registry.LocateRegistry; import java.rmi.server.UnicastRemoteObject; public class SupplierRemote extends AgentRemote implements ISupplierImpl { Supplier realObject; public void setRealObject(Supplier aObject) { realObject=aObject; } public SupplierRemote() {} public SupplierRemote(Supplier aObject) { super(aObject); realObject=aObject; } public int getHashCodeImpl() { while(true) try{ return realObject.getHashCodeImpl(); } catch(Exception e) {System.err.println(e.toString());} } public Product getProductImpl(int index) { while(true) try{ return realObject.getProductImpl(index); } catch(Exception e) {System.err.println(e.toString());} } public List<Product> getProductsImpl() { while(true) try{ return realObject.getProductsImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfProductsImpl() { while(true) try{ return realObject.numberOfProductsImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasProductsImpl() { while(true) try{ return realObject.hasProductsImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfProductImpl(Product aProduct) { while(true) try{ return realObject.indexOfProductImpl(aProduct); } catch(Exception e) {System.err.println(e.toString());} } public boolean addProductImpl(Product aProduct) { while(true) try{ return realObject.addProductImpl(aProduct); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeProductImpl(Product aProduct) { while(true) try{ return realObject.removeProductImpl(aProduct); } catch(Exception e) {System.err.println(e.toString());} } public boolean addProductAtImpl(Product aProduct, int index) { while(true) try{ return realObject.addProductAtImpl(aProduct,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveProductAtImpl(Product aProduct, int index) { while(true) try{ return realObject.addOrMoveProductAtImpl(aProduct,index); } catch(Exception e) {System.err.println(e.toString());} } public void deleteImpl() { while(true) try{ realObject.deleteImpl(); break; } catch(Exception e) {System.err.println(e.toString());} } public Product createProductImpl(String serialNumber, String productType) { while(true) try{ return realObject.createProductImpl(serialNumber,productType); } catch(Exception e) {System.err.println(e.toString());} } public void putInWarehouseImpl(Product aProduct, Warehouse warehouse) { while(true) try{ realObject.putInWarehouseImpl(aProduct,warehouse); break; } catch(Exception e) {System.err.println(e.toString());} } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceRMI1; import java.io.Serializable; // line 82 "../ecommerceRMI1.ump" public class Product implements java.io.Serializable { //------------------------ // MEMBER VARIABLES //------------------------ //Product Attributes private String serialNumber; //Product Associations private ProductType productType; //Helper Variables private boolean canSetProductType; //------------------------ // CONSTRUCTOR //------------------------ public Product(String aSerialNumber, ProductType aProductType) { serialNumber = aSerialNumber; canSetProductType = true; if (!setProductType(aProductType)) { throw new RuntimeException("Unable to create Product due to aProductType. See https://manual.umple.org?RE002ViolationofAssociationMultiplicity.html"); } } //------------------------ // INTERFACE //------------------------ public String getSerialNumber() { return serialNumber; } /* Code from template association_GetOne */ public ProductType getProductType() { return productType; } /* Code from template association_SetUnidirectionalOne */ private boolean setProductType(ProductType aNewProductType) { boolean wasSet = false; if (!canSetProductType) { return false; } canSetProductType = false; if (aNewProductType != null) { productType = aNewProductType; wasSet = true; } return wasSet; } public void delete() {} public String toString() { return super.toString() + "["+ "serialNumber" + ":" + getSerialNumber()+ "]" + System.getProperties().getProperty("line.separator") + " " + "productType = "+(getProductType()!=null?Integer.toHexString(System.identityHashCode(getProductType())):"null"); } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceRMI1; import java.util.*; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; // line 61 "../ecommerceRMI1.ump" public class VendorImpl extends AgentImpl implements java.io.Serializable , IVendorImpl { //------------------------ // MEMBER VARIABLES //------------------------ //VendorImpl Associations private List<Order> orders; private List<Customer> customers; //------------------------ // CONSTRUCTOR //------------------------ public VendorImpl(String aName) { super(aName); orders = new ArrayList<Order>(); customers = new ArrayList<Customer>(); } //------------------------ // Reference to the proxy //------------------------ Vendor self; public void setSelf(Vendor proxy) { super.setSelf(proxy); self=proxy; } //------------------------ // Returning the Hashcode //------------------------ public int getHashCode() { return hashCode(); } //------------------------ // INTERFACE //------------------------ /* Code from template association_GetMany */ public Order getOrder(int index) { Order aOrder = orders.get(index); return aOrder; } public List<Order> getOrders() { List<Order> newOrders = Collections.unmodifiableList(orders); return newOrders; } public int numberOfOrders() { int number = orders.size(); return number; } public boolean hasOrders() { boolean has = orders.size() > 0; return has; } public int indexOfOrder(Order aOrder) { int index = orders.indexOf(aOrder); return index; } /* Code from template association_GetMany */ public Customer getCustomer(int index) { Customer aCustomer = customers.get(index); return aCustomer; } public List<Customer> getCustomers() { List<Customer> newCustomers = Collections.unmodifiableList(customers); return newCustomers; } public int numberOfCustomers() { int number = customers.size(); return number; } public boolean hasCustomers() { boolean has = customers.size() > 0; return has; } public int indexOfCustomer(Customer aCustomer) { int index = customers.indexOf(aCustomer); return index; } /* Code from template association_MinimumNumberOfMethod */ public static int minimumNumberOfOrders() { return 0; } /* Code from template association_AddManyToOptionalOne */ public boolean addOrder(Order aOrder) { boolean wasAdded = false; if (orders.contains(aOrder)) { return false; } Vendor existingVendor = aOrder.getVendor(); if (existingVendor == null) { aOrder.setVendor(self); } else if (!self.equals(existingVendor)) { existingVendor.removeOrder(aOrder); addOrder(aOrder); } else { orders.add(aOrder); } wasAdded = true; return wasAdded; } public boolean removeOrder(Order aOrder) { boolean wasRemoved = false; if (orders.contains(aOrder)) { orders.remove(aOrder); aOrder.setVendor(null); wasRemoved = true; } return wasRemoved; } /* Code from template association_AddIndexControlFunctions */ public boolean addOrderAt(Order aOrder, int index) { boolean wasAdded = false; if(addOrder(aOrder)) { if(index < 0 ) { index = 0; } if(index > numberOfOrders()) { index = numberOfOrders() - 1; } orders.remove(aOrder); orders.add(index, aOrder); wasAdded = true; } return wasAdded; } public boolean addOrMoveOrderAt(Order aOrder, int index) { boolean wasAdded = false; if(orders.contains(aOrder)) { if(index < 0 ) { index = 0; } if(index > numberOfOrders()) { index = numberOfOrders() - 1; } orders.remove(aOrder); orders.add(index, aOrder); wasAdded = true; } else { wasAdded = addOrderAt(aOrder, index); } return wasAdded; } /* Code from template association_MinimumNumberOfMethod */ public static int minimumNumberOfCustomers() { return 0; } /* Code from template association_AddManyToManyMethod */ public boolean addCustomer(Customer aCustomer) { boolean wasAdded = false; if (customers.contains(aCustomer)) { return false; } customers.add(aCustomer); if (aCustomer.indexOfVendor(self) != -1) { wasAdded = true; } else { wasAdded = aCustomer.addVendor(self); if (!wasAdded) { customers.remove(aCustomer); } } return wasAdded; } /* Code from template association_RemoveMany */ public boolean removeCustomer(Customer aCustomer) { boolean wasRemoved = false; if (!customers.contains(aCustomer)) { return wasRemoved; } int oldIndex = customers.indexOf(aCustomer); customers.remove(oldIndex); if (aCustomer.indexOfVendor(self) == -1) { wasRemoved = true; } else { wasRemoved = aCustomer.removeVendor(self); if (!wasRemoved) { customers.add(oldIndex,aCustomer); } } return wasRemoved; } /* Code from template association_AddIndexControlFunctions */ public boolean addCustomerAt(Customer aCustomer, int index) { boolean wasAdded = false; if(addCustomer(aCustomer)) { if(index < 0 ) { index = 0; } if(index > numberOfCustomers()) { index = numberOfCustomers() - 1; } customers.remove(aCustomer); customers.add(index, aCustomer); wasAdded = true; } return wasAdded; } public boolean addOrMoveCustomerAt(Customer aCustomer, int index) { boolean wasAdded = false; if(customers.contains(aCustomer)) { if(index < 0 ) { index = 0; } if(index > numberOfCustomers()) { index = numberOfCustomers() - 1; } customers.remove(aCustomer); customers.add(index, aCustomer); wasAdded = true; } else { wasAdded = addCustomerAt(aCustomer, index); } return wasAdded; } public void delete() { while( !orders.isEmpty() ) { orders.get(0).setVendor(null); } ArrayList<Customer> copyOfCustomers = new ArrayList<Customer>(customers); customers.clear(); for(Customer aCustomer : copyOfCustomers) { aCustomer.removeVendor(self); } super.delete(); } // line 65 "../ecommerceRMI1.ump" public Product findProduct(ProductType productType){ for(Warehouse w:getWarehouses()) { Product p= w.findProduct(productType); if(p!=null) return p; } return null; } // line 74 "../ecommerceRMI1.ump" public Order makeOrder(Customer aCustomer, Product aProduct){ if(aProduct==null) return null; Order aOrder= new Order(aProduct); aOrder.setCustomer(aCustomer); aOrder.setVendor(self); return aOrder; } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package distributed.rmi.withMethods2; import java.util.*; import java.lang.Thread; import java.rmi.RemoteException; public interface IMicrowaveImpl extends java.rmi.Remote, ICCImpl { public void setSelf(Microwave proxy) throws RemoteException; public int getHashCode() throws RemoteException; public boolean setLightOn(boolean aLightOn) throws RemoteException; public boolean setPowerTubeOn(boolean aPowerTubeOn) throws RemoteException; public boolean setIsDoorOpened(boolean aIsDoorOpened) throws RemoteException; public boolean setIsButtonPressed(boolean aIsButtonPressed) throws RemoteException; public boolean getLightOn() throws RemoteException; public boolean getPowerTubeOn() throws RemoteException; public boolean getIsDoorOpened() throws RemoteException; public boolean getIsButtonPressed() throws RemoteException; public boolean _doorOpened() throws RemoteException; public boolean _buttonPressed() throws RemoteException; public boolean _doorClosed() throws RemoteException; public void delete() throws RemoteException; public void doorOpened() throws RemoteException; public void buttonPressed() throws RemoteException; public void doorClosed() throws RemoteException; public void run() throws RemoteException; public void turnLightOn(boolean on) throws RemoteException; } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceRMI0; import java.util.*; import java.io.Serializable; // line 45 "../ecommerceRMI0.ump" public class Supplier extends Agent implements java.io.Serializable, ISupplierImpl { //------------------------ // MEMBER VARIABLES //------------------------ //Supplier Associations private transient List<Product> products; //------------------------ // CONSTRUCTOR //------------------------ public Supplier(String aName, UmpleRuntime.UmpleComponent umpleComponent) { super(aName,umpleComponent); if(umpleComponent.getNode().getId()!=UmpleRuntime.getThisNodeId()) { if(this.getClass()== Supplier.class) UmpleRuntime.getInstance().newSupplier(aName, umpleComponent, this); return; } products = new ArrayList<Product>(); } //------------------------ // Returning the Hashcode //------------------------ public int getHashCodeImpl() { return hashCode(); } //------------------------ // INTERFACE //------------------------ /* Code from template association_GetMany */ public Product getProductImpl(int index) { Product aProduct = products.get(index); return aProduct; } public List<Product> getProductsImpl() { List<Product> newProducts = Collections.unmodifiableList(products); return newProducts; } public int numberOfProductsImpl() { int number = products.size(); return number; } public boolean hasProductsImpl() { boolean has = products.size() > 0; return has; } public int indexOfProductImpl(Product aProduct) { int index = products.indexOf(aProduct); return index; } /* Code from template association_MinimumNumberOfMethod */ public static int minimumNumberOfProducts() { return 0; } /* Code from template association_AddUnidirectionalMany */ public boolean addProductImpl(Product aProduct) { boolean wasAdded = false; if (products.contains(aProduct)) { return false; } products.add(aProduct); wasAdded = true; return wasAdded; } public boolean removeProductImpl(Product aProduct) { boolean wasRemoved = false; if (products.contains(aProduct)) { products.remove(aProduct); wasRemoved = true; } return wasRemoved; } /* Code from template association_AddIndexControlFunctions */ public boolean addProductAtImpl(Product aProduct, int index) { boolean wasAdded = false; if(addProduct(aProduct)) { if(index < 0 ) { index = 0; } if(index > numberOfProducts()) { index = numberOfProducts() - 1; } products.remove(aProduct); products.add(index, aProduct); wasAdded = true; } return wasAdded; } public boolean addOrMoveProductAtImpl(Product aProduct, int index) { boolean wasAdded = false; if(products.contains(aProduct)) { if(index < 0 ) { index = 0; } if(index > numberOfProducts()) { index = numberOfProducts() - 1; } products.remove(aProduct); products.add(index, aProduct); wasAdded = true; } else { wasAdded = addProductAt(aProduct, index); } return wasAdded; } public void deleteImpl() { products.clear(); super.delete(); } // line 51 "../ecommerceRMI0.ump" public Product createProductImpl(String serialNumber, String productType){ Product aProduct=new Product(serialNumber,new ProductType(productType)); addProduct(aProduct); return aProduct; } // line 57 "../ecommerceRMI0.ump" public void putInWarehouseImpl(Product aProduct, Warehouse warehouse){ warehouse.addProduct(aProduct); } public void setRealObject(ISupplierImpl aObject) { super.setRealObject(aObject); realObject=aObject; } transient ISupplierImpl realObject=this; public Supplier(String aName) { this(aName,UmpleRuntime.getComponent("Supplier")); } public int getHashCode() { while(true) try{ return realObject.getHashCodeImpl(); } catch(Exception e) {System.err.println(e.toString());} } public Product getProduct(int index) { while(true) try{ return realObject.getProductImpl(index); } catch(Exception e) {System.err.println(e.toString());} } public List<Product> getProducts() { while(true) try{ return realObject.getProductsImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfProducts() { while(true) try{ return realObject.numberOfProductsImpl(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasProducts() { while(true) try{ return realObject.hasProductsImpl(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfProduct(Product aProduct) { while(true) try{ return realObject.indexOfProductImpl(aProduct); } catch(Exception e) {System.err.println(e.toString());} } public boolean addProduct(Product aProduct) { while(true) try{ return realObject.addProductImpl(aProduct); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeProduct(Product aProduct) { while(true) try{ return realObject.removeProductImpl(aProduct); } catch(Exception e) {System.err.println(e.toString());} } public boolean addProductAt(Product aProduct, int index) { while(true) try{ return realObject.addProductAtImpl(aProduct,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveProductAt(Product aProduct, int index) { while(true) try{ return realObject.addOrMoveProductAtImpl(aProduct,index); } catch(Exception e) {System.err.println(e.toString());} } public void delete() { while(true) try{ realObject.deleteImpl(); break; } catch(Exception e) {System.err.println(e.toString());} } public Product createProduct(String serialNumber, String productType) { while(true) try{ return realObject.createProductImpl(serialNumber,productType); } catch(Exception e) {System.err.println(e.toString());} } public void putInWarehouse(Product aProduct, Warehouse warehouse) { while(true) try{ realObject.putInWarehouseImpl(aProduct,warehouse); break; } catch(Exception e) {System.err.println(e.toString());} } public void setRemoteObject(ISupplierImpl aRemoteObject) { remoteObject=aRemoteObject; } public ISupplierImpl getRemoteObject() { return (ISupplierImpl)remoteObject; } private void readObject(java.io.ObjectInputStream in) throws Exception { try { in.defaultReadObject(); realObject=(ISupplierImpl)remoteObject; } catch(Exception e) { throw e; } } public boolean equals(Object obj) { if(obj.getClass()!=this.getClass()) return false; return (getHashCode()==((Supplier)obj).getHashCode()); } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceRMI1; import java.util.*; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; import java.rmi.RemoteException; import java.io.Serializable; import ecommerceRMI1.UmpleRuntime; public class Vendor extends Agent implements java.io.Serializable { public void setRealObject(IVendorImpl aObject) { super.setRealObject(aObject); realObject=aObject; } IVendorImpl realObject; public Vendor(String aName, UmpleRuntime.UmpleComponent component) { if(this.getClass()== Vendor.class) setRealObject(UmpleRuntime.getInstance().newVendor(aName, component, this)); } public Vendor(String aName) { if(this.getClass()== Vendor.class) setRealObject(UmpleRuntime.getInstance().newVendor(aName, this)); } public void setSelf(Vendor proxy) { while(true) try{ realObject.setSelf(proxy); break; } catch(Exception e) {System.err.println(e.toString());} } public int getHashCode() { while(true) try{ return realObject.getHashCode(); } catch(Exception e) {System.err.println(e.toString());} } public Order getOrder(int index) { while(true) try{ return realObject.getOrder(index); } catch(Exception e) {System.err.println(e.toString());} } public List<Order> getOrders() { while(true) try{ return realObject.getOrders(); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfOrders() { while(true) try{ return realObject.numberOfOrders(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasOrders() { while(true) try{ return realObject.hasOrders(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfOrder(Order aOrder) { while(true) try{ return realObject.indexOfOrder(aOrder); } catch(Exception e) {System.err.println(e.toString());} } public Customer getCustomer(int index) { while(true) try{ return realObject.getCustomer(index); } catch(Exception e) {System.err.println(e.toString());} } public List<Customer> getCustomers() { while(true) try{ return realObject.getCustomers(); } catch(Exception e) {System.err.println(e.toString());} } public int numberOfCustomers() { while(true) try{ return realObject.numberOfCustomers(); } catch(Exception e) {System.err.println(e.toString());} } public boolean hasCustomers() { while(true) try{ return realObject.hasCustomers(); } catch(Exception e) {System.err.println(e.toString());} } public int indexOfCustomer(Customer aCustomer) { while(true) try{ return realObject.indexOfCustomer(aCustomer); } catch(Exception e) {System.err.println(e.toString());} } public static int minimumNumberOfOrders() { while(true) try{ return VendorImpl.minimumNumberOfOrders(); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrder(Order aOrder) { while(true) try{ return realObject.addOrder(aOrder); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeOrder(Order aOrder) { while(true) try{ return realObject.removeOrder(aOrder); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrderAt(Order aOrder, int index) { while(true) try{ return realObject.addOrderAt(aOrder,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveOrderAt(Order aOrder, int index) { while(true) try{ return realObject.addOrMoveOrderAt(aOrder,index); } catch(Exception e) {System.err.println(e.toString());} } public static int minimumNumberOfCustomers() { while(true) try{ return VendorImpl.minimumNumberOfCustomers(); } catch(Exception e) {System.err.println(e.toString());} } public boolean addCustomer(Customer aCustomer) { while(true) try{ return realObject.addCustomer(aCustomer); } catch(Exception e) {System.err.println(e.toString());} } public boolean removeCustomer(Customer aCustomer) { while(true) try{ return realObject.removeCustomer(aCustomer); } catch(Exception e) {System.err.println(e.toString());} } public boolean addCustomerAt(Customer aCustomer, int index) { while(true) try{ return realObject.addCustomerAt(aCustomer,index); } catch(Exception e) {System.err.println(e.toString());} } public boolean addOrMoveCustomerAt(Customer aCustomer, int index) { while(true) try{ return realObject.addOrMoveCustomerAt(aCustomer,index); } catch(Exception e) {System.err.println(e.toString());} } public void delete() { while(true) try{ realObject.delete(); break; } catch(Exception e) {System.err.println(e.toString());} } public Product findProduct(ProductType productType) { while(true) try{ return realObject.findProduct(productType); } catch(Exception e) {System.err.println(e.toString());} } public Order makeOrder(Customer aCustomer, Product aProduct) { while(true) try{ return realObject.makeOrder(aCustomer,aProduct); } catch(Exception e) {System.err.println(e.toString());} } public boolean equals(Object obj) { if(obj.getClass()!=this.getClass()) return false; return (getHashCode()==((Vendor)obj).getHashCode()); } protected Vendor(){} } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceRMI0; import java.util.*; import java.io.Serializable; import java.rmi.RemoteException; public interface ICustomerImpl extends java.rmi.Remote { public int getHashCodeImpl() throws RemoteException; public boolean setNameImpl(String aName) throws RemoteException; public String getNameImpl() throws RemoteException; public Vendor getVendorImpl(int index) throws RemoteException; public List<Vendor> getVendorsImpl() throws RemoteException; public int numberOfVendorsImpl() throws RemoteException; public boolean hasVendorsImpl() throws RemoteException; public int indexOfVendorImpl(Vendor aVendor) throws RemoteException; public Order getOrderImpl(int index) throws RemoteException; public List<Order> getOrdersImpl() throws RemoteException; public int numberOfOrdersImpl() throws RemoteException; public boolean hasOrdersImpl() throws RemoteException; public int indexOfOrderImpl(Order aOrder) throws RemoteException; public SystemManager getSystemManagerImpl() throws RemoteException; public boolean hasSystemManagerImpl() throws RemoteException; public boolean addVendorImpl(Vendor aVendor) throws RemoteException; public boolean removeVendorImpl(Vendor aVendor) throws RemoteException; public boolean addVendorAtImpl(Vendor aVendor, int index) throws RemoteException; public boolean addOrMoveVendorAtImpl(Vendor aVendor, int index) throws RemoteException; public boolean addOrderImpl(Order aOrder) throws RemoteException; public boolean removeOrderImpl(Order aOrder) throws RemoteException; public boolean addOrderAtImpl(Order aOrder, int index) throws RemoteException; public boolean addOrMoveOrderAtImpl(Order aOrder, int index) throws RemoteException; public boolean setSystemManagerImpl(SystemManager aSystemManager) throws RemoteException; public void deleteImpl() throws RemoteException; public Order orderProductImpl(String productType, String vendorName) throws RemoteException; } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package distributed.rmi.withMethods2; import java.util.*; import java.lang.Thread; import java.rmi.RemoteException; import java.io.Serializable; import distributed.rmi.withMethods2.UmpleRuntime; public class Microwave extends CC implements java.io.Serializable { public void setRealObject(IMicrowaveImpl aObject) { super.setRealObject(aObject); realObject=aObject; } IMicrowaveImpl realObject; public Microwave(UmpleRuntime.UmpleComponent component) { if(this.getClass()== Microwave.class) setRealObject(UmpleRuntime.getInstance().newMicrowave(component, this)); } public Microwave() { if(this.getClass()== Microwave.class) setRealObject(UmpleRuntime.getInstance().newMicrowave(this)); } public void setSelf(Microwave proxy) { while(true) try{ realObject.setSelf(proxy); break; } catch(Exception e) {System.err.println(e.toString());} } public int getHashCode() { while(true) try{ return realObject.getHashCode(); } catch(Exception e) {System.err.println(e.toString());} } public boolean setLightOn(boolean aLightOn) { while(true) try{ return realObject.setLightOn(aLightOn); } catch(Exception e) {System.err.println(e.toString());} } public boolean setPowerTubeOn(boolean aPowerTubeOn) { while(true) try{ return realObject.setPowerTubeOn(aPowerTubeOn); } catch(Exception e) {System.err.println(e.toString());} } public boolean setIsDoorOpened(boolean aIsDoorOpened) { while(true) try{ return realObject.setIsDoorOpened(aIsDoorOpened); } catch(Exception e) {System.err.println(e.toString());} } public boolean setIsButtonPressed(boolean aIsButtonPressed) { while(true) try{ return realObject.setIsButtonPressed(aIsButtonPressed); } catch(Exception e) {System.err.println(e.toString());} } public boolean getLightOn() { while(true) try{ return realObject.getLightOn(); } catch(Exception e) {System.err.println(e.toString());} } public boolean getPowerTubeOn() { while(true) try{ return realObject.getPowerTubeOn(); } catch(Exception e) {System.err.println(e.toString());} } public boolean getIsDoorOpened() { while(true) try{ return realObject.getIsDoorOpened(); } catch(Exception e) {System.err.println(e.toString());} } public boolean getIsButtonPressed() { while(true) try{ return realObject.getIsButtonPressed(); } catch(Exception e) {System.err.println(e.toString());} } public boolean _doorOpened() { while(true) try{ return realObject._doorOpened(); } catch(Exception e) {System.err.println(e.toString());} } public boolean _buttonPressed() { while(true) try{ return realObject._buttonPressed(); } catch(Exception e) {System.err.println(e.toString());} } public boolean _doorClosed() { while(true) try{ return realObject._doorClosed(); } catch(Exception e) {System.err.println(e.toString());} } public void delete() { while(true) try{ realObject.delete(); break; } catch(Exception e) {System.err.println(e.toString());} } public void doorOpened () { while(true) try{ realObject.doorOpened(); break; } catch(Exception e) {System.err.println(e.toString());} } public void buttonPressed () { while(true) try{ realObject.buttonPressed(); break; } catch(Exception e) {System.err.println(e.toString());} } public void doorClosed () { while(true) try{ realObject.doorClosed(); break; } catch(Exception e) {System.err.println(e.toString());} } public void run () { while(true) try{ realObject.run(); break; } catch(Exception e) {System.err.println(e.toString());} } public void turnLightOn(boolean on) { while(true) try{ realObject.turnLightOn(on); break; } catch(Exception e) {System.err.println(e.toString());} } public static void someMethod() { while(true) try{ MicrowaveImpl.someMethod(); } catch(Exception e) {System.err.println(e.toString());} } public boolean equals(Object obj) { if(obj.getClass()!=this.getClass()) return false; return (getHashCode()==((Microwave)obj).getHashCode()); } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceWS; import java.io.Serializable; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAccessType; // line 85 "../ecommerceWS.ump" @XmlAccessorType(XmlAccessType.FIELD) public class Product implements java.io.Serializable { //------------------------ // MEMBER VARIABLES //------------------------ //Product Attributes private String serialNumber; //Product Associations private ProductType productType; //Helper Variables private boolean canSetProductType; //------------------------ // CONSTRUCTOR //------------------------ public Product(String aSerialNumber, ProductType aProductType) { serialNumber = aSerialNumber; canSetProductType = true; if (!setProductType(aProductType)) { throw new RuntimeException("Unable to create Product due to aProductType. See https://manual.umple.org?RE002ViolationofAssociationMultiplicity.html"); } } //------------------------ // INTERFACE //------------------------ public String getSerialNumber() { return serialNumber; } /* Code from template association_GetOne */ public ProductType getProductType() { return productType; } /* Code from template association_SetUnidirectionalOne */ private boolean setProductType(ProductType aNewProductType) { boolean wasSet = false; if (!canSetProductType) { return false; } canSetProductType = false; if (aNewProductType != null) { productType = aNewProductType; wasSet = true; } return wasSet; } public void delete() {} // line 90 "../ecommerceWS.ump" public Product(){ } public String toString() { return super.toString() + "["+ "serialNumber" + ":" + getSerialNumber()+ "]" + System.getProperties().getProperty("line.separator") + " " + "productType = "+(getProductType()!=null?Integer.toHexString(System.identityHashCode(getProductType())):"null"); } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceRMI0; import java.util.*; import java.io.Serializable; import java.rmi.RemoteException; public interface IAgentImpl extends java.rmi.Remote { public int getHashCodeImpl() throws RemoteException; public boolean setNameImpl(String aName) throws RemoteException; public String getNameImpl() throws RemoteException; public Warehouse getWarehousImpl(int index) throws RemoteException; public List<Warehouse> getWarehousesImpl() throws RemoteException; public int numberOfWarehousesImpl() throws RemoteException; public boolean hasWarehousesImpl() throws RemoteException; public int indexOfWarehousImpl(Warehouse aWarehous) throws RemoteException; public SystemManager getSystemManagerImpl() throws RemoteException; public boolean hasSystemManagerImpl() throws RemoteException; public boolean addWarehousImpl(Warehouse aWarehous) throws RemoteException; public boolean removeWarehousImpl(Warehouse aWarehous) throws RemoteException; public boolean addWarehousAtImpl(Warehouse aWarehous, int index) throws RemoteException; public boolean addOrMoveWarehousAtImpl(Warehouse aWarehous, int index) throws RemoteException; public boolean setSystemManagerImpl(SystemManager aSystemManager) throws RemoteException; public void deleteImpl() throws RemoteException; } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceRMI0; import ecommerceRMI0.Agent; import java.rmi.Remote; import java.util.Properties; import java.io.*; import java.io.IOException; import java.io.FileInputStream; import java.rmi.registry.Registry; import java.io.InputStreamReader; import java.io.File; import ecommerceRMI0.Vendor; import java.rmi.RemoteException; import java.io.Serializable; import ecommerceRMI0.Supplier; import java.util.regex.Matcher; import java.rmi.registry.LocateRegistry; import java.util.*; import ecommerceRMI0.Customer; import java.rmi.server.UnicastRemoteObject; import java.io.BufferedReader; import java.io.FileReader; import java.util.regex.Pattern; import ecommerceRMI0.Warehouse; import ecommerceRMI0.SystemManager; import java.io.InputStream; public class UmpleRuntime implements IUmpleRuntime { private static Boolean isAlive = true; static int thisNodeId=-1; private int numberOfNodes=0; private static String fileAddress=""; static HashMap<Integer, UmpleNode> nodes=new HashMap<Integer, UmpleNode>(); static HashMap <String, UmpleComponent> components= new HashMap<String, UmpleComponent>(); public static void setFileAddress(String address) { fileAddress=address; } public static int getThisNodeId() { return thisNodeId; } private static void setThisNodeId(int id) { thisNodeId=id; } private static void readPropertiesFile() { String location="configuration.txt"; Properties prop = new Properties(); InputStream input = null; try { input = new FileInputStream("node.properties"); prop.load(input); if(getThisNodeId()<0) setThisNodeId(Integer.parseInt(prop.getProperty("name"))); location=prop.getProperty("location"); setFileAddress(location); } catch (IOException e) { e.printStackTrace(); if(getThisNodeId()<0) setThisNodeId(0); setFileAddress(location); } finally { if (input != null) { try { input.close(); } catch (IOException e) { e.printStackTrace(); } } } } public static UmpleComponent getComponent(String runtimeComponentName) { getInstance(); UmpleComponent aComponent=components.get(runtimeComponentName.toLowerCase()); if (aComponent!=null) return aComponent; else return components.get("local"); } public static void stopAll() { UmpleRuntime.getInstance().stopAllNodes(); } public void stopAllNodes() { for(int node=0;node<numberOfNodes;node=node+1) { if(node!=getThisNodeId()) { try { remoteFactories.get(node).stopNode(); } catch(Exception e) {System.err.println(e.toString());} } } stopNode(); } // ******************************** Factory public static UmpleRuntime theInstance = null; List<IUmpleRuntime> remoteFactories; public List<Object> listOfObjects; public static UmpleRuntime getInstance() { if(theInstance==null){ theInstance = new UmpleRuntime(); } return theInstance; } private UmpleRuntime() { listOfObjects=new ArrayList<Object>(); remoteFactories= new ArrayList<IUmpleRuntime>(); initialize(); } public int getNodeId(int umpleNodeId) { int nodeId=umpleNodeId; if(nodeId>=numberOfNodes) nodeId=numberOfNodes-1; return nodeId; } public int getNodeId(UmpleComponent umpleComponent) { return umpleComponent.getNode().getId(); } private void readConfigFile() { String input="{id=0; port=1099; https://localhost {component1}}{id=1; port=1700; https://localhost {component2}}"; try (BufferedReader br = new BufferedReader(new FileReader(fileAddress))) { input=""; String line; while ((line = br.readLine()) != null) { // Merging the lines input+=line+";"; } } catch (IOException e) { e.printStackTrace(); } finally { if (input != null) { int startIndex=input.indexOf("{"); if(startIndex>=0) //while(startIndex>=0) { Pattern pattern1 = Pattern.compile("([\\{|\\(])([^\\}\\)]+)([\\{|\\(])"); Pattern pattern2 = Pattern.compile("([\\}|\\)])([^\\{\\(]+)([\\}|\\)])"); Pattern pattern3 = Pattern.compile("([\\{|\\(])([^\\{\\(\\}\\)]+)([\\}|\\)])"); Pattern patternURL = Pattern.compile("(url)(\\s*[=|:]\\s*)([^;\\s]*)(,|;|\\r\\n|\\t)"); Pattern patternName = Pattern.compile("(id)(\\s*[=|:]\\s*)([^;\\s]*)(,|;|\\r\\n|\\t)"); Pattern patternPort = Pattern.compile("(port)(\\s*[=|:]\\s*)([^;\\s]*)(,|;|\\r\\n|\\t)"); Pattern patternIp = Pattern.compile("(ip)(\\s*[=|:]\\s*)([^;\\s]*)(,|;|\\r\\n|\\t)"); Pattern patternComponent = Pattern.compile("(\\s*)([^;,\\s]*)(\\s*)([,|;|\\r\\n|\\t])"); Matcher matcher1 = pattern1.matcher(input); Matcher matcher2 = pattern2.matcher(input); Matcher matcher3 = pattern3.matcher(input); String url=""; String ip=""; String name=""; int port=1111; String part1=""; String part2=""; String part3=""; String runtimeComponents=""; String machine=""; Boolean condition1=matcher1.find(); Boolean condition2=matcher2.find(); Boolean condition3=matcher3.find(); while (condition1||condition2||condition3) { url="https://localhost"; ip="localhost"; name=""; port=1111; part1=""; part2=""; part3=""; runtimeComponents=""; machine=""; if(condition1) part1=matcher1.group(2); if(condition2) part2=matcher2.group(2); if(condition3) part3=matcher3.group(2); if(condition1&&matcher3.end()>matcher1.end()) { machine=part1.toLowerCase()+part2.toLowerCase(); runtimeComponents=part3.toLowerCase()+";"; condition1=matcher1.find(); condition2=matcher2.find(); condition3=matcher3.find(); }else { machine=part3.toLowerCase(); condition3=matcher3.find(); } Matcher matcherURL = patternURL.matcher(machine); if(matcherURL.find()) url=matcherURL.group(3); Matcher matcherName = patternName.matcher(machine); if(matcherName.find()) name=matcherName.group(3); Matcher matcherIp = patternIp.matcher(machine); if(matcherIp.find()) ip=matcherIp.group(3); Matcher matcherPort = patternPort.matcher(machine); if(matcherPort.find()) port=Integer.parseInt(matcherPort.group(3)); UmpleNode aNode= new UmpleNode(Integer.parseInt(name)); Matcher matcherComponent = patternComponent.matcher(runtimeComponents); while(matcherComponent.find()) { String component=matcherComponent.group(2); UmpleComponent aComponent=new UmpleComponent(component,aNode); components.put(component,aComponent); } if(aNode.getId()==getThisNodeId()) { UmpleComponent aComponent=new UmpleComponent("local",aNode); components.put("local",aComponent); } aNode.setPort(port); aNode.setUrl(url); aNode.setIp(ip); nodes.put(aNode.getId(),aNode); } } } } } Registry rmiRegistry; public void initialize() { if(fileAddress.equals("")) readPropertiesFile(); readConfigFile(); numberOfNodes= nodes.size(); startRMI(); for(int node=0;node<numberOfNodes;node=node+1) { if(node==getThisNodeId()) { remoteFactories.add(this); } else { System.out.println("connecting to node: "+node); Boolean success=false; while(!success) { try { Registry registry = LocateRegistry.getRegistry(nodes.get(node).getIp(),nodes.get(node).getPort()); IUmpleRuntime stub = (IUmpleRuntime) registry.lookup("UmpleRuntime"+String.valueOf(node)); remoteFactories.add(stub); success=true; } catch (Exception e) { System.err.println("Client exception: " + e.toString()); e.printStackTrace(); try { Thread.sleep(5000); } catch (InterruptedException interruptedException) {}; } } } } } public void startRMI() { IUmpleRuntime stub; try { // Bind the remote object's stub in the registry rmiRegistry= LocateRegistry.createRegistry(nodes.get(getThisNodeId()).getPort()); stub = (IUmpleRuntime) UnicastRemoteObject.exportObject(this, nodes.get(getThisNodeId()).getPort()); rmiRegistry.bind("UmpleRuntime"+String.valueOf(getThisNodeId()), stub); System.err.println("Server ready"); } catch (Exception e) { System.err.println("binding exception: " + e.toString()); } } public void stopNode() { System.out.println("stopping node"); try { stopRMI(); } catch (Exception e) { System.err.println("Could not stop RMI: "+ e.toString()); } isAlive=false; } public void stopRMI() throws Exception { for(Object object: listOfObjects) { try { UnicastRemoteObject.unexportObject((Remote)object, true); } catch(Exception e) { throw e; } } try { UnicastRemoteObject.unexportObject(this, true); } catch(Exception e) { throw e; } } public void newWarehouse(String aName, UmpleRuntime.UmpleComponent component,Warehouse object) { while(true){ try {object.setRemoteObject(remoteFactories.get(getNodeId(component)).createWarehouse(aName)); object.setRealObject(object.getRemoteObject()); break; } catch(Exception e) { e.printStackTrace(); try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } } } public void newWarehouse(Warehouse object){ WarehouseRemote remoteObject; try{ remoteObject = (WarehouseRemote)Class.forName(object.getClass().getName()+"Remote").getConstructor(object.getClass()).newInstance(object); } catch (Exception e) { System.err.println("Class not found " + e.toString()); return; } listOfObjects.add(remoteObject); while(true) { try { UnicastRemoteObject.exportObject(remoteObject,nodes.get(getThisNodeId()).getPort()); object.setRemoteObject(remoteObject); break; } catch (Exception e) { System.err.println("Server Exception: " + e.toString()); try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } } } synchronized public IWarehouseImpl createWarehouse(String aName) { Warehouse object= new Warehouse(aName, UmpleRuntime.getComponent("local")); return object.getRemoteObject(); } public void newAgent(String aName, UmpleRuntime.UmpleComponent component,Agent object) { while(true){ try {object.setRemoteObject(remoteFactories.get(getNodeId(component)).createAgent(aName)); object.setRealObject(object.getRemoteObject()); break; } catch(Exception e) { e.printStackTrace(); try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } } } public void newAgent(Agent object){ AgentRemote remoteObject; try{ remoteObject = (AgentRemote)Class.forName(object.getClass().getName()+"Remote").getConstructor(object.getClass()).newInstance(object); } catch (Exception e) { System.err.println("Class not found " + e.toString()); return; } listOfObjects.add(remoteObject); while(true) { try { UnicastRemoteObject.exportObject(remoteObject,nodes.get(getThisNodeId()).getPort()); object.setRemoteObject(remoteObject); break; } catch (Exception e) { System.err.println("Server Exception: " + e.toString()); try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } } } synchronized public IAgentImpl createAgent(String aName) { Agent object= new Agent(aName, UmpleRuntime.getComponent("local")); return object.getRemoteObject(); } public void newSupplier(String aName, UmpleRuntime.UmpleComponent component,Supplier object) { while(true){ try {object.setRemoteObject(remoteFactories.get(getNodeId(component)).createSupplier(aName)); object.setRealObject(object.getRemoteObject()); break; } catch(Exception e) { e.printStackTrace(); try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } } } public void newSupplier(Supplier object){ SupplierRemote remoteObject; try{ remoteObject = (SupplierRemote)Class.forName(object.getClass().getName()+"Remote").getConstructor(object.getClass()).newInstance(object); } catch (Exception e) { System.err.println("Class not found " + e.toString()); return; } listOfObjects.add(remoteObject); while(true) { try { UnicastRemoteObject.exportObject(remoteObject,nodes.get(getThisNodeId()).getPort()); object.setRemoteObject(remoteObject); break; } catch (Exception e) { System.err.println("Server Exception: " + e.toString()); try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } } } synchronized public ISupplierImpl createSupplier(String aName) { Supplier object= new Supplier(aName, UmpleRuntime.getComponent("local")); return object.getRemoteObject(); } public void newVendor(String aName, UmpleRuntime.UmpleComponent component,Vendor object) { while(true){ try {object.setRemoteObject(remoteFactories.get(getNodeId(component)).createVendor(aName)); object.setRealObject(object.getRemoteObject()); break; } catch(Exception e) { e.printStackTrace(); try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } } } public void newVendor(Vendor object){ VendorRemote remoteObject; try{ remoteObject = (VendorRemote)Class.forName(object.getClass().getName()+"Remote").getConstructor(object.getClass()).newInstance(object); } catch (Exception e) { System.err.println("Class not found " + e.toString()); return; } listOfObjects.add(remoteObject); while(true) { try { UnicastRemoteObject.exportObject(remoteObject,nodes.get(getThisNodeId()).getPort()); object.setRemoteObject(remoteObject); break; } catch (Exception e) { System.err.println("Server Exception: " + e.toString()); try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } } } synchronized public IVendorImpl createVendor(String aName) { Vendor object= new Vendor(aName, UmpleRuntime.getComponent("local")); return object.getRemoteObject(); } public void newCustomer(String aName, UmpleRuntime.UmpleComponent component,Customer object) { while(true){ try {object.setRemoteObject(remoteFactories.get(getNodeId(component)).createCustomer(aName)); object.setRealObject(object.getRemoteObject()); break; } catch(Exception e) { e.printStackTrace(); try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } } } public void newCustomer(Customer object){ CustomerRemote remoteObject; try{ remoteObject = (CustomerRemote)Class.forName(object.getClass().getName()+"Remote").getConstructor(object.getClass()).newInstance(object); } catch (Exception e) { System.err.println("Class not found " + e.toString()); return; } listOfObjects.add(remoteObject); while(true) { try { UnicastRemoteObject.exportObject(remoteObject,nodes.get(getThisNodeId()).getPort()); object.setRemoteObject(remoteObject); break; } catch (Exception e) { System.err.println("Server Exception: " + e.toString()); try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } } } synchronized public ICustomerImpl createCustomer(String aName) { Customer object= new Customer(aName, UmpleRuntime.getComponent("local")); return object.getRemoteObject(); } public void newSystemManager(UmpleRuntime.UmpleComponent component,SystemManager object) { while(true){ try {object.setRemoteObject(remoteFactories.get(getNodeId(component)).createSystemManager()); object.setRealObject(object.getRemoteObject()); break; } catch(Exception e) { e.printStackTrace(); try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } } } public void newSystemManager(SystemManager object){ SystemManagerRemote remoteObject; try{ remoteObject = (SystemManagerRemote)Class.forName(object.getClass().getName()+"Remote").getConstructor(object.getClass()).newInstance(object); } catch (Exception e) { System.err.println("Class not found " + e.toString()); return; } listOfObjects.add(remoteObject); while(true) { try { UnicastRemoteObject.exportObject(remoteObject,nodes.get(getThisNodeId()).getPort()); object.setRemoteObject(remoteObject); break; } catch (Exception e) { System.err.println("Server Exception: " + e.toString()); try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } } } synchronized public ISystemManagerImpl createSystemManager() { SystemManager object= SystemManager.getInstance(UmpleRuntime.getComponent("local")); return object.getRemoteObject(); } public static void main (String [] args) { if (args.length>0){ setThisNodeId(Integer.parseInt(args[0])); if (args.length>1) UmpleRuntime.setFileAddress(args[1]); } UmpleRuntime.getInstance(); while(isAlive){ try { Thread.sleep(1000); } catch (InterruptedException interruptedException) {}; } } public class UmpleNode { //------------------------ // MEMBER VARIABLES //------------------------ private int id; private String ip="localhost"; private String url="https://localhost"; private int port=1098; //------------------------ // CONSTRUCTOR //------------------------ public UmpleNode(int aId) { id= aId; } //------------------------ // INTERFACE //------------------------ public boolean setId(int aId) { boolean wasSet = false; id = aId; wasSet = true; return wasSet; } public boolean setIp(String aIp) { boolean wasSet = false; ip = aIp; wasSet = true; return wasSet; } public boolean setUrl(String aUrl) { boolean wasSet = false; url = aUrl; wasSet = true; return wasSet; } public boolean setPort(int aPort) { boolean wasSet = false; port = aPort; wasSet = true; return wasSet; } public int getId() { return id; } public String getIp() { return ip; } public String getUrl() { return url; } public int getPort() { return port; } public String toString() { return super.toString() + "["+"id" + ":" + getId()+ "]"; } } public class UmpleComponent { //------------------------ // MEMBER VARIABLES //------------------------ //UmpleComponent Attributes private int number=0; private String name; private UmpleNode node; //------------------------ // CONSTRUCTOR //------------------------ public UmpleComponent(String aName,UmpleNode aNode) { name=aName; node=aNode; } //------------------------ // INTERFACE //------------------------ public boolean setNumber(int aNumber) { boolean wasSet = false; number = aNumber; wasSet = true; return wasSet; } public boolean setName(String aName) { boolean wasSet = false; name = aName; wasSet = true; return wasSet; } public boolean setNode(UmpleNode aNode) { boolean wasSet = false; node = aNode; wasSet = true; return wasSet; } public UmpleNode getNode() { return node; } public int getNumber() { return number; } public String getName() { return name; } public boolean equals(Object object) { if(object instanceof UmpleComponent && ((UmpleComponent)object).getName() == this.name) { return true; } else { return false; } } } } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceRMI1; import java.util.*; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; import java.rmi.RemoteException; public interface IAgentImpl extends java.rmi.Remote { public void setSelf(Agent proxy) throws RemoteException; public int getHashCode() throws RemoteException; public boolean setName(String aName) throws RemoteException; public String getName() throws RemoteException; public Warehouse getWarehous(int index) throws RemoteException; public List<Warehouse> getWarehouses() throws RemoteException; public int numberOfWarehouses() throws RemoteException; public boolean hasWarehouses() throws RemoteException; public int indexOfWarehous(Warehouse aWarehous) throws RemoteException; public SystemManager getSystemManager() throws RemoteException; public boolean hasSystemManager() throws RemoteException; public boolean addWarehous(Warehouse aWarehous) throws RemoteException; public boolean removeWarehous(Warehouse aWarehous) throws RemoteException; public boolean addWarehousAt(Warehouse aWarehous, int index) throws RemoteException; public boolean addOrMoveWarehousAt(Warehouse aWarehous, int index) throws RemoteException; public boolean setSystemManager(SystemManager aSystemManager) throws RemoteException; public void delete() throws RemoteException; } /*PLEASE DO NOT EDIT THIS CODE*/ /*This code was generated using the UMPLE 1.35.0.7523.c616a4dce modeling language!*/ package ecommerceRMI1; import java.util.*; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; // line 101 "../ecommerceRMI1.ump" public class CustomerImpl implements java.io.Serializable , ICustomerImpl { //------------------------ // MEMBER VARIABLES //------------------------ //CustomerImpl Attributes private String name; //CustomerImpl Associations private List<Vendor> vendors; private List<Order> orders; private SystemManager systemManager; //------------------------ // CONSTRUCTOR //------------------------ public CustomerImpl(String aName) { name = aName; vendors = new ArrayList<Vendor>(); orders = new ArrayList<Order>(); } //------------------------ // Reference to the proxy //------------------------ Customer self; public void setSelf(Customer proxy) { self=proxy; } //------------------------ // Returning the Hashcode //------------------------ public int getHashCode() { return hashCode(); } //------------------------ // INTERFACE //------------------------ public boolean setName(String aName) { boolean wasSet = false; name = aName; wasSet = true; return wasSet; } public String getName() { return name; } /* Code from template association_GetMany */ public Vendor getVendor(int index) { Vendor aVendor = vendors.get(index); return aVendor; } public List<Vendor> getVendors() { List<Vendor> newVendors = Collections.unmodifiableList(vendors); return newVendors; } public int numberOfVendors() { int number = vendors.size(); return number; } public boolean hasVendors() { boolean has = vendors.size() > 0; return has; } public int indexOfVendor(Vendor aVendor) { int index = vendors.indexOf(aVendor); return index; } /* Code from template association_GetMany */ public Order getOrder(int index) { Order aOrder = orders.get(index); return aOrder; } public List<Order> getOrders() { List<Order> newOrders = Collections.unmodifiableList(orders); return newOrders; } public int numberOfOrders() { int number = orders.size(); return number; } public boolean hasOrders() { boolean has = orders.size() > 0; return has; } public int indexOfOrder(Order aOrder) { int index = orders.indexOf(aOrder); return index; } /* Code from template association_GetOne */ public SystemManager getSystemManager() { return systemManager; } public boolean hasSystemManager() { boolean has = systemManager != null; return has; } /* Code from template association_MinimumNumberOfMethod */ public static int minimumNumberOfVendors() { return 0; } /* Code from template association_AddManyToManyMethod */ public boolean addVendor(Vendor aVendor) { boolean wasAdded = false; if (vendors.contains(aVendor)) { return false; } vendors.add(aVendor); if (aVendor.indexOfCustomer(self) != -1) { wasAdded = true; } else { wasAdded = aVendor.addCustomer(self); if (!wasAdded) { vendors.remove(aVendor); } } return wasAdded; } /* Code from template association_RemoveMany */ public boolean removeVendor(Vendor aVendor) { boolean wasRemoved = false; if (!vendors.contains(aVendor)) { return wasRemoved; } int oldIndex = vendors.indexOf(aVendor); vendors.remove(oldIndex); if (aVendor.indexOfCustomer(self) == -1) { wasRemoved = true; } else { wasRemoved = aVendor.removeCustomer(self); if (!wasRemoved) { vendors.add(oldIndex,aVendor); } } return wasRemoved; } /* Code from template association_AddIndexControlFunctions */ public boolean addVendorAt(Vendor aVendor, int index) { boolean wasAdded = false; if(addVendor(aVendor)) { if(index < 0 ) { index = 0; } if(index > numberOfVendors()) { index = numberOfVendors() - 1; } vendors.remove(aVendor); vendors.add(index, aVendor); wasAdded = true; } return wasAdded; } public boolean addOrMoveVendorAt(Vendor aVendor, int index) { boolean wasAdded = false; if(vendors.contains(aVendor)) { if(index < 0 ) { index = 0; } if(index > numberOfVendors()) { index = numberOfVendors() - 1; } vendors.remove(aVendor); vendors.add(index, aVendor); wasAdded = true; } else { wasAdded = addVendorAt(aVendor, index); } return wasAdded; } /* Code from template association_MinimumNumberOfMethod */ public static int minimumNumberOfOrders() { return 0; } /* Code from template association_AddManyToOptionalOne */ public boolean addOrder(Order aOrder) { boolean wasAdded = false; if (orders.contains(aOrder)) { return false; } Customer existingCustomer = aOrder.getCustomer(); if (existingCustomer == null) { aOrder.setCustomer(self); } else if (!self.equals(existingCustomer)) { existingCustomer.removeOrder(aOrder); addOrder(aOrder); } else { orders.add(aOrder); } wasAdded = true; return wasAdded; } public boolean removeOrder(Order aOrder) { boolean wasRemoved = false; if (orders.contains(aOrder)) { orders.remove(aOrder); aOrder.setCustomer(null); wasRemoved = true; } return wasRemoved; } /* Code from template association_AddIndexControlFunctions */ public boolean addOrderAt(Order aOrder, int index) { boolean wasAdded = false; if(addOrder(aOrder)) { if(index < 0 ) { index = 0; } if(index > numberOfOrders()) { index = numberOfOrders() - 1; } orders.remove(aOrder); orders.add(index, aOrder); wasAdded = true; } return wasAdded; } public boolean addOrMoveOrderAt(Order aOrder, int index) { boolean wasAdded = false; if(orders.contains(aOrder)) { if(index < 0 ) { index = 0; } if(index > numberOfOrders()) { index = numberOfOrders() - 1; } orders.remove(aOrder); orders.add(index, aOrder); wasAdded = true; } else { wasAdded = addOrderAt(aOrder, index); } return wasAdded; } /* Code from template association_SetOptionalOneToMany */ public boolean setSystemManager(SystemManager aSystemManager) { boolean wasSet = false; SystemManager existingSystemManager = systemManager; systemManager = aSystemManager; if (existingSystemManager != null && !existingSystemManager.equals(aSystemManager)) { existingSystemManager.removeCustomer(self); } if (aSystemManager != null) { aSystemManager.addCustomer(self); } wasSet = true; return wasSet; } public void delete() { ArrayList<Vendor> copyOfVendors = new ArrayList<Vendor>(vendors); vendors.clear(); for(Vendor aVendor : copyOfVendors) { aVendor.removeCustomer(self); } while( !orders.isEmpty() ) { orders.get(0).setCustomer(null); } if (systemManager != null) { SystemManager placeholderSystemManager = systemManager; this.systemManager = null; placeholderSystemManager.removeCustomer(self); } } // line 107 "../ecommerceRMI1.ump" public Order orderProduct(String productType, String vendorName){ for(Vendor v: getVendors()) { if(v.getName().equals(vendorName)) return v.makeOrder(self,v.findProduct(new ProductType(productType))); } return null; } public String toString() { return super.toString() + "["+ "name" + ":" + getName()+ "]" + System.getProperties().getProperty("line.separator") + " " + "systemManager = "+(getSystemManager()!=null?Integer.toHexString(System.identityHashCode(getSystemManager())):"null"); } }