00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 package org.objectweb.proactive.core.descriptor.data;
00032
00033 import java.util.Collection;
00034 import java.util.HashMap;
00035 import java.util.Iterator;
00036 import java.util.Map;
00037 import java.util.Set;
00038
00039 import org.apache.log4j.Logger;
00040 import org.objectweb.proactive.ProActive;
00041 import org.objectweb.proactive.core.ProActiveException;
00042 import org.objectweb.proactive.core.body.ProActiveMetaObjectFactory;
00043 import org.objectweb.proactive.core.descriptor.services.ServiceUser;
00044 import org.objectweb.proactive.core.descriptor.services.TechnicalService;
00045 import org.objectweb.proactive.core.descriptor.services.TechnicalServiceWrapper;
00046 import org.objectweb.proactive.core.descriptor.services.TechnicalServiceXmlType;
00047 import org.objectweb.proactive.core.descriptor.services.UniversalService;
00048 import org.objectweb.proactive.core.process.AbstractSequentialListProcessDecorator;
00049 import org.objectweb.proactive.core.process.ExternalProcess;
00050 import org.objectweb.proactive.core.process.ExternalProcessDecorator;
00051 import org.objectweb.proactive.core.process.HierarchicalProcess;
00052 import org.objectweb.proactive.core.process.JVMProcess;
00053 import org.objectweb.proactive.core.process.JVMProcessImpl;
00054 import org.objectweb.proactive.core.process.filetransfer.FileTransferDefinition;
00055 import org.objectweb.proactive.core.runtime.ProActiveRuntimeImpl;
00056 import org.objectweb.proactive.core.util.log.Loggers;
00057 import org.objectweb.proactive.core.util.log.ProActiveLogger;
00058 import org.objectweb.proactive.core.xml.VariableContract;
00059 import org.objectweb.proactive.ext.security.PolicyServer;
00060 import org.objectweb.proactive.ext.security.ProActiveSecurityDescriptorHandler;
00061 import org.objectweb.proactive.ext.security.ProActiveSecurityManager;
00062 import org.objectweb.proactive.ext.security.exceptions.InvalidPolicyFile;
00063
00064
00078 public class ProActiveDescriptorImpl implements ProActiveDescriptor {
00079
00080
00081
00082 protected static Logger logger = ProActiveLogger.getLogger(Loggers.DEPLOYMENT);
00083 private String lastMainDefinitionID;
00084
00086 private Map<String, MainDefinition> mainDefinitionMapping;
00087
00089 private java.util.HashMap<String, VirtualNode> virtualNodeMapping;
00090
00092 private java.util.HashMap<String, VirtualMachine> virtualMachineMapping;
00093
00095 private java.util.HashMap processMapping;
00096
00098 private java.util.HashMap<String, ProcessUpdater> pendingProcessMapping;
00099
00101 private java.util.HashMap<String, UniversalService> serviceMapping;
00102
00104 private java.util.HashMap pendingServiceMapping;
00105
00107 private java.util.HashMap<String, FileTransferDefinition> fileTransferMapping;
00108
00110 private VariableContract variableContract;
00111
00113 private String url;
00114 private String jobID;
00115 private String descriptorURL;
00116 private boolean mainDefined;
00117
00119 protected ProActiveSecurityManager proactiveSecurityManager;
00120 public PolicyServer policyServer;
00121
00122
00123 public String securityFile;
00124 private HashMap<String, TechnicalService> technicalServiceMapping;
00125
00126
00127
00128
00129 public ProActiveDescriptorImpl(String url) {
00130 mainDefinitionMapping = new HashMap<String, MainDefinition>();
00131 virtualNodeMapping = new java.util.HashMap<String, VirtualNode>();
00132 virtualMachineMapping = new java.util.HashMap<String, VirtualMachine>();
00133 processMapping = new java.util.HashMap();
00134 pendingProcessMapping = new java.util.HashMap<String, ProcessUpdater>();
00135 serviceMapping = new java.util.HashMap<String, UniversalService>();
00136 pendingServiceMapping = new java.util.HashMap();
00137 fileTransferMapping = new java.util.HashMap<String, FileTransferDefinition>();
00138 variableContract = new VariableContract();
00139 this.url = url;
00140 this.descriptorURL = url;
00141 mainDefined = false;
00142 this.technicalServiceMapping = new HashMap<String, TechnicalService>();
00143 }
00144
00145
00146
00147
00148 public String getUrl() {
00149 return this.url;
00150 }
00151
00152 public String getProActiveDescriptorURL() {
00153 return descriptorURL;
00154 }
00155
00160 public void createMainDefinition(String id) {
00161 lastMainDefinitionID = id;
00162 mainDefinitionMapping.put(id, new MainDefinition());
00163 }
00164
00169 public void mainDefinitionSetMainClass(String mainClass) {
00170 getMainDefinition().setMainClass(mainClass);
00171 }
00172
00178 public void mainDefinitionAddParameter(String parameter) {
00179 getMainDefinition().addParameter(parameter);
00180 }
00181
00188 public String[] mainDefinitionGetParameters(String mainDefinitionId) {
00189 return getMainDefinition(mainDefinitionId).getParameters();
00190 }
00191
00196 public void mainDefinitionAddVirtualNode(VirtualNode virtualNode) {
00197 getMainDefinition().addVirtualNode(virtualNode);
00198 }
00199
00204 public boolean isMainDefined() {
00205 return mainDefined;
00206 }
00207
00208 public void setMainDefined(boolean mainDefined) {
00209 this.mainDefined = mainDefined;
00210 }
00211
00216 public void activateMains() {
00217 if (!isMainDefined()) {
00218 return;
00219 }
00220
00221 for (String id : mainDefinitionMapping.keySet()) {
00222 activateMain(id);
00223 }
00224 }
00225
00230 public void activateMain(String mainDefinitionId) {
00231 MainDefinition mainDefinition = getMainDefinition(mainDefinitionId);
00232
00233 if (mainDefinition != null) {
00234 mainDefinition.activateMain();
00235 }
00236 }
00237
00242 public Map getMainDefinitionMapping() {
00243 return mainDefinitionMapping;
00244 }
00245
00246 public void setMainDefinitionMapping(HashMap<String, MainDefinition> newMapping) {
00247 mainDefinitionMapping = newMapping;
00248 }
00249
00254 public Map<String, VirtualNode> getVirtualNodeMapping() {
00255 return virtualNodeMapping;
00256 }
00257
00258 public void setVirtualNodeMapping(HashMap<String, VirtualNode> newMapping) {
00259 virtualNodeMapping = newMapping;
00260 }
00261
00266 public MainDefinition[] getMainDefinitions() {
00267 MainDefinition[] mainDefinitions = new MainDefinition[mainDefinitionMapping.size()];
00268 Set<String> mainsId = mainDefinitionMapping.keySet();
00269 Iterator it = mainsId.iterator();
00270 int i = 0;
00271
00272 while (it.hasNext()) {
00273 String id = (String) it.next();
00274 mainDefinitions[i] = getMainDefinition(id);
00275 i++;
00276 }
00277
00278 return mainDefinitions;
00279 }
00280
00281 public VirtualNode[] getVirtualNodes() {
00282 int i = 0;
00283 VirtualNode[] virtualNodeArray = new VirtualNode[virtualNodeMapping.size()];
00284 Collection collection = virtualNodeMapping.values();
00285
00286 for (Iterator iter = collection.iterator(); iter.hasNext();) {
00287 virtualNodeArray[i] = (VirtualNode) iter.next();
00288 i++;
00289 }
00290
00291 return virtualNodeArray;
00292 }
00293
00294 public VirtualNode getVirtualNode(String name) {
00295 return virtualNodeMapping.get(name);
00296 }
00297
00298 public VirtualMachine getVirtualMachine(String name) {
00299 return virtualMachineMapping.get(name);
00300 }
00301
00302 public ExternalProcess getProcess(String name) {
00303 return (ExternalProcess) processMapping.get(name);
00304 }
00305
00306 public ExternalProcess getHierarchicalProcess(String vmname) {
00307 VirtualMachine vm = getVirtualMachine(vmname);
00308
00309 if (vm == null) {
00310 logger.warn("" + vmname + "cannot be found");
00311
00312 return null;
00313 }
00314
00315 if (vm.getProcess() instanceof HierarchicalProcess) {
00316 return ((HierarchicalProcess) vm.getProcess()).getHierarchicalProcess();
00317 } else {
00318 logger.warn("" + vmname +
00319 " does not contain a hierarchical process !");
00320
00321 return null;
00322 }
00323 }
00324
00325 public UniversalService getService(String serviceID) {
00326 return serviceMapping.get(serviceID);
00327 }
00328
00338 protected FileTransferDefinition createFileTransferDefinition(
00339 String fileTransferID) {
00340 FileTransferDefinition ft = new FileTransferDefinition(fileTransferID);
00341 fileTransferMapping.put(fileTransferID, ft);
00342
00343 if (logger.isDebugEnabled()) {
00344 logger.debug("created FileTransfer id=" + fileTransferID);
00345 }
00346
00347 return ft;
00348 }
00349
00350 public VirtualNode createVirtualNode(String vnName, boolean lookup) {
00351 return createVirtualNode(vnName, lookup, false);
00352 }
00353
00354 public VirtualNode createVirtualNode(String vnName, boolean lookup,
00355 boolean isMainNode) {
00356 VirtualNode vn = getVirtualNode(vnName);
00357
00358 if (jobID == null) {
00359 if (isMainDefined()) {
00360 this.jobID = generateNewJobID();
00361
00362
00363 } else {
00364 this.jobID = ProActive.getJobId();
00365
00366
00367 }
00368
00369 this.url = url + this.jobID;
00370 }
00371
00372 if (vn == null) {
00373 if (lookup) {
00374 vn = new VirtualNodeLookup(vnName);
00375 } else {
00376 vn = new VirtualNodeImpl(vnName, proactiveSecurityManager,
00377 this.url, isMainNode, this);
00378 ((VirtualNodeImpl) vn).jobID = this.jobID;
00379
00380
00381 }
00382
00383 virtualNodeMapping.put(vnName, vn);
00384
00385 if (logger.isInfoEnabled()) {
00386 logger.info("created VirtualNode name=" + vnName);
00387 }
00388 }
00389
00390 return vn;
00391 }
00392
00393 public VirtualMachine createVirtualMachine(String vmName) {
00394 VirtualMachine vm = getVirtualMachine(vmName);
00395
00396 if (vm == null) {
00397 vm = new VirtualMachineImpl();
00398 vm.setName(vmName);
00399 virtualMachineMapping.put(vmName, vm);
00400 }
00401
00402 if (logger.isDebugEnabled()) {
00403 logger.debug("created virtualMachine name=" + vmName);
00404 }
00405
00406 return vm;
00407 }
00408
00409 public ExternalProcess createProcess(String processID,
00410 String processClassName) throws ProActiveException {
00411 ExternalProcess process = getProcess(processID);
00412
00413 if (process == null) {
00414 process = createProcess(processClassName);
00415 addExternalProcess(processID, process);
00416 }
00417
00418 return process;
00419 }
00420
00421 public ExternalProcess createProcess(String processClassName)
00422 throws ProActiveException {
00423 try {
00424 Class processClass = Class.forName(processClassName);
00425 ExternalProcess process = (ExternalProcess) processClass.newInstance();
00426
00427 return process;
00428 } catch (ClassNotFoundException e) {
00429 throw new ProActiveException(e);
00430 } catch (InstantiationException e) {
00431 throw new ProActiveException(e);
00432 } catch (IllegalAccessException e) {
00433 throw new ProActiveException(e);
00434 }
00435 }
00436
00437 public void registerProcess(VirtualMachine virtualMachine, String processID) {
00438 ExternalProcess process = getProcess(processID);
00439
00440 if (process == null) {
00441 addPendingProcess(processID, virtualMachine);
00442 } else {
00443 virtualMachine.setProcess(process);
00444 }
00445 }
00446
00447 public synchronized FileTransferDefinition getFileTransfer(
00448 String fileTransferID) {
00449
00450
00451 FileTransferDefinition ft = fileTransferMapping.get(fileTransferID);
00452
00453 if (ft == null) {
00454 ft = createFileTransferDefinition(fileTransferID);
00455 fileTransferMapping.put(fileTransferID, ft);
00456
00457 if (logger.isDebugEnabled()) {
00458 logger.debug("created FileTransfer id=" + fileTransferID);
00459 }
00460 }
00461
00462 return ft;
00463 }
00464
00465 public void registerProcess(ExternalProcessDecorator compositeProcess,
00466 String processID) {
00467 ExternalProcess process = getProcess(processID);
00468
00469 if (process == null) {
00470 addPendingProcess(processID, compositeProcess);
00471 } else {
00472 compositeProcess.setTargetProcess(process);
00473 }
00474 }
00475
00476 public void addProcessToSequenceList(
00477 AbstractSequentialListProcessDecorator sequentialListProcess,
00478 String processID) {
00479 ExternalProcess process = (ExternalProcess) getProcess(processID);
00480 if (process == null) {
00481 addSequentialPendingProcess(processID, sequentialListProcess);
00482 } else {
00483 sequentialListProcess.addProcessToList(process);
00484 }
00485 }
00486
00487 public void addServiceToSequenceList(
00488 AbstractSequentialListProcessDecorator sequentialListProcess,
00489 String processID) {
00490 UniversalService service = (UniversalService) processMapping.get(processID);
00491 if (service == null) {
00492 addSequentialPendingService(processID, sequentialListProcess);
00493 sequentialListProcess.setFirstElementIsService(true);
00494 } else {
00495 sequentialListProcess.addServiceToList(service);
00496 sequentialListProcess.setFirstElementIsService(true);
00497 }
00498 }
00499
00500 public void mapToExtendedJVM(JVMProcess jvmProcess, String processID)
00501 throws ProActiveException {
00502 try {
00503 JVMProcessImpl process = (JVMProcessImpl) getProcess(processID);
00504
00505 if (process == null) {
00506 throw new ProActiveException("The jvmProcess with id " +
00507 processID +
00508 " is not yet defined in the descriptor. The extended jvmProcess must be defined before all jvmProcesses that extend it");
00509
00510
00511 } else {
00512 jvmProcess.setExtendedJVM(process);
00513 }
00514 } catch (ClassCastException e) {
00515 logger.fatal(
00516 "ERROR: a jvmProcess can only extend another jvmProcess. Correct the Descriptor");
00517 e.printStackTrace();
00518 }
00519 }
00520
00521 public void registerHierarchicalProcess(HierarchicalProcess hp,
00522 String processID) {
00523 ExternalProcess process = getProcess(processID);
00524
00525 if (process == null) {
00526 addHierarchicalPendingProcess(processID, hp);
00527 } else {
00528 hp.setHierarchicalProcess(process);
00529 }
00530 }
00531
00532 public void addService(String serviceID, UniversalService service) {
00533 ServiceUpdater serviceUpdater = (ServiceUpdater) pendingServiceMapping.remove(serviceID);
00534
00535 if (serviceUpdater != null) {
00536 if (logger.isDebugEnabled()) {
00537 logger.debug("Updating Service name=" + serviceID);
00538 }
00539
00540 serviceUpdater.updateService(service);
00541 }
00542
00543 processMapping.put(serviceID, service);
00544 }
00545
00546 public void registerService(ServiceUser serviceUser, String serviceID) {
00547 UniversalService service = getService(serviceID);
00548
00549 if (service == null) {
00550 addPendingService(serviceID, serviceUser);
00551 } else {
00552 try {
00553 serviceUser.setService(service);
00554 } catch (ProActiveException e) {
00555 e.printStackTrace();
00556 logger.error("the given service " + service.getServiceName() +
00557 " cannot be set for class " + serviceUser.getUserClass());
00558 }
00559 }
00560 }
00561
00562 public void activateMappings() {
00563 VirtualNode[] virtualNodeArray = getVirtualNodes();
00564
00565 for (int i = 0; i < virtualNodeArray.length; i++) {
00566 virtualNodeArray[i].activate();
00567 }
00568 }
00569
00570 public void activateMapping(String virtualNodeName) {
00571 VirtualNode virtualNode = getVirtualNode(virtualNodeName);
00572 virtualNode.activate();
00573 }
00574
00575 public void killall(boolean softly) throws ProActiveException {
00576 ProActiveRuntimeImpl part = (ProActiveRuntimeImpl) ProActiveRuntimeImpl.getProActiveRuntime();
00577
00578 part.removeDescriptor(this.url);
00579
00580 VirtualNode[] vnArray = getVirtualNodes();
00581
00582 for (int i = 0; i < vnArray.length; i++) {
00583 vnArray[i].killAll(softly);
00584 virtualNodeMapping.remove(vnArray[i].getName());
00585
00586
00587 }
00588 }
00589
00594 public int getVirtualNodeMappingSize() {
00595 return virtualNodeMapping.size();
00596 }
00597
00598
00599
00604 public void createProActiveSecurityManager(String file) {
00605 securityFile = file;
00606
00607 try {
00608 policyServer = ProActiveSecurityDescriptorHandler.createPolicyServer(file);
00609 proactiveSecurityManager = new ProActiveSecurityManager(policyServer);
00610
00611
00612
00613
00614 ProActiveSecurityManager psm = proactiveSecurityManager.generateSiblingCertificate(
00615 "HalfBody");
00616 ProActiveMetaObjectFactory.newInstance()
00617 .setProActiveSecurityManager(psm);
00618 } catch (InvalidPolicyFile e) {
00619 e.printStackTrace();
00620 }
00621 }
00622
00623 public PolicyServer getPolicyServer() {
00624 return policyServer;
00625 }
00626
00627
00628
00629
00630 public String getSecurityFilePath() {
00631 return securityFile;
00632 }
00633
00634
00635
00636
00637
00638
00639
00640 private MainDefinition getMainDefinition(String mainDefinitionID) {
00641 return mainDefinitionMapping.get(mainDefinitionID);
00642 }
00643
00648 private MainDefinition getMainDefinition() {
00649 return getMainDefinition(lastMainDefinitionID);
00650 }
00651
00652 private void addExternalProcess(String processID, ExternalProcess process) {
00653 ProcessUpdater processUpdater = (ProcessUpdater) pendingProcessMapping.remove(processID);
00654
00655 if (processUpdater != null) {
00656 if (logger.isDebugEnabled()) {
00657 logger.debug("Updating Process name=" + processID);
00658 }
00659
00660 processUpdater.updateProcess(process);
00661 }
00662
00663 processMapping.put(processID, process);
00664 }
00665
00666 private void addPendingProcess(String processID,
00667 VirtualMachine virtualMachine) {
00668 ProcessUpdater updater = new VirtualMachineUpdater(virtualMachine);
00669
00670
00671 addProcessUpdater(processID, updater);
00672 }
00673
00674 private void addPendingProcess(String processID,
00675 ExternalProcessDecorator compositeProcess) {
00676 ProcessUpdater updater = new CompositeExternalProcessUpdater(compositeProcess);
00677
00678
00679 addProcessUpdater(processID, updater);
00680 }
00681
00682 private void addHierarchicalPendingProcess(String processID,
00683 HierarchicalProcess hp) {
00684 ProcessUpdater updater = new HierarchicalProcessUpdater(hp);
00685 addProcessUpdater(processID, updater);
00686 }
00687
00688 private void addSequentialPendingProcess(String processID,
00689 AbstractSequentialListProcessDecorator sp) {
00690 ProcessUpdater updater = new SequentialProcessUpdater(sp);
00691 addProcessUpdater(processID, updater);
00692 }
00693
00694 private void addSequentialPendingService(String processID,
00695 AbstractSequentialListProcessDecorator sp) {
00696 ServiceUpdater updater = new SequentialServiceUpdater(sp);
00697 addServiceUpdater(processID, updater);
00698 }
00699
00700
00701
00702
00703
00704
00705
00706
00707 private void addProcessUpdater(String processID,
00708 ProcessUpdater processUpdater) {
00709 CompositeProcessUpdater compositeProcessUpdater = (CompositeProcessUpdater) pendingProcessMapping.get(processID);
00710
00711 if (compositeProcessUpdater == null) {
00712 compositeProcessUpdater = new CompositeProcessUpdater();
00713
00714
00715 pendingProcessMapping.put(processID, compositeProcessUpdater);
00716 }
00717
00718 compositeProcessUpdater.addProcessUpdater(processUpdater);
00719 }
00720
00721 private void addPendingService(String serviceID, ServiceUser serviceUser) {
00722 ServiceUpdater updater = null;
00723
00724 if (serviceUser instanceof VirtualMachine) {
00725 updater = new VirtualMachineUpdater((VirtualMachine) serviceUser);
00726 } else {
00727 updater = new ServiceUpdaterImpl(serviceUser);
00728 }
00729
00730 addServiceUpdater(serviceID, updater);
00731 }
00732
00733 private void addServiceUpdater(String serviceID,
00734 ServiceUpdater serviceUpdater) {
00735 CompositeServiceUpdater compositeServiceUpdater = (CompositeServiceUpdater) pendingServiceMapping.get(serviceID);
00736
00737 if (compositeServiceUpdater == null) {
00738 compositeServiceUpdater = new CompositeServiceUpdater();
00739
00740
00741 pendingServiceMapping.put(serviceID, compositeServiceUpdater);
00742 }
00743
00744 compositeServiceUpdater.addServiceUpdater(serviceUpdater);
00745 }
00746
00752 private String generateNewJobID() {
00753 return "JOB-" + System.currentTimeMillis();
00754 }
00755
00756
00757
00758
00759 private interface ServiceUpdater {
00760 public void updateService(UniversalService service);
00761 }
00762
00763 private interface ProcessUpdater {
00764 public void updateProcess(ExternalProcess p);
00765 }
00766
00767 private class CompositeServiceUpdater implements ServiceUpdater {
00768 private java.util.ArrayList<ServiceUpdater> updaterList;
00769
00770 public CompositeServiceUpdater() {
00771 updaterList = new java.util.ArrayList<ServiceUpdater>();
00772 }
00773
00774 public void addServiceUpdater(ServiceUpdater s) {
00775 updaterList.add(s);
00776 }
00777
00778 public void updateService(UniversalService s) {
00779
00780 for (ServiceUpdater serviceUpdater : updaterList) {
00781 serviceUpdater.updateService(s);
00782 }
00783
00784 updaterList.clear();
00785 }
00786 }
00787
00788 private class CompositeProcessUpdater implements ProcessUpdater {
00789 private java.util.ArrayList<ProcessUpdater> updaterList;
00790
00791 public CompositeProcessUpdater() {
00792 updaterList = new java.util.ArrayList<ProcessUpdater>();
00793 }
00794
00795 public void addProcessUpdater(ProcessUpdater p) {
00796 updaterList.add(p);
00797 }
00798
00799 public void updateProcess(ExternalProcess p) {
00800
00801 for (ProcessUpdater processUpdater : updaterList) {
00802 processUpdater.updateProcess(p);
00803 }
00804
00805 updaterList.clear();
00806 }
00807 }
00808
00809 private class CompositeExternalProcessUpdater implements ProcessUpdater {
00810 private ExternalProcessDecorator compositeExternalProcess;
00811
00812 public CompositeExternalProcessUpdater(
00813 ExternalProcessDecorator compositeExternalProcess) {
00814 this.compositeExternalProcess = compositeExternalProcess;
00815 }
00816
00817 public void updateProcess(ExternalProcess p) {
00818 if (logger.isDebugEnabled()) {
00819 logger.debug("Updating CompositeExternal Process");
00820 }
00821
00822 compositeExternalProcess.setTargetProcess(p);
00823 }
00824 }
00825
00826 private class HierarchicalProcessUpdater implements ProcessUpdater {
00827 private HierarchicalProcess hp;
00828
00829 public HierarchicalProcessUpdater(HierarchicalProcess hp) {
00830 this.hp = hp;
00831 }
00832
00833 public void updateProcess(ExternalProcess p) {
00834 if (logger.isDebugEnabled()) {
00835 logger.debug("Updating Hierarchical Process");
00836 }
00837
00838 hp.setHierarchicalProcess(p);
00839 }
00840 }
00841
00842 private class SequentialProcessUpdater implements ProcessUpdater {
00843 private AbstractSequentialListProcessDecorator spd;
00844
00845 public SequentialProcessUpdater(
00846 AbstractSequentialListProcessDecorator spd) {
00847 this.spd = spd;
00848 }
00849
00850 public void updateProcess(ExternalProcess p) {
00851 if (logger.isDebugEnabled()) {
00852 logger.debug("Updating Sequential Process");
00853 }
00854
00855
00856 spd.addProcessToList(0, (ExternalProcessDecorator) p);
00857 }
00858 }
00859
00860 private class SequentialServiceUpdater implements ServiceUpdater {
00861 private AbstractSequentialListProcessDecorator spd;
00862
00863 public SequentialServiceUpdater(
00864 AbstractSequentialListProcessDecorator spd) {
00865 this.spd = spd;
00866 }
00867
00868 public void updateService(UniversalService s) {
00869 if (logger.isDebugEnabled()) {
00870 logger.debug("Updating Sequential Service");
00871 }
00872
00873
00874 spd.addServiceToList(0, (UniversalService) s);
00875 }
00876 }
00877
00878
00879
00880
00881
00882
00883
00884
00885
00886
00887
00888
00889
00890 private class VirtualMachineUpdater implements ProcessUpdater,
00891 ServiceUpdater {
00892 private VirtualMachine virtualMachine;
00893
00894 public VirtualMachineUpdater(VirtualMachine virtualMachine) {
00895 this.virtualMachine = virtualMachine;
00896 }
00897
00898 public void updateProcess(ExternalProcess p) {
00899 if (logger.isDebugEnabled()) {
00900 logger.debug("Updating VirtualMachine Process");
00901 }
00902
00903 virtualMachine.setProcess(p);
00904 }
00905
00906 public void updateService(UniversalService s) {
00907 if (logger.isDebugEnabled()) {
00908 logger.debug("Updating VirtualMachine Service");
00909 }
00910
00911 virtualMachine.setService(s);
00912 }
00913 }
00914
00915 private class ServiceUpdaterImpl implements ServiceUpdater {
00916 private ServiceUser serviceUser;
00917
00918 public ServiceUpdaterImpl(ServiceUser serviceUser) {
00919 this.serviceUser = serviceUser;
00920 }
00921
00922 public void updateService(UniversalService s) {
00923 if (logger.isDebugEnabled()) {
00924 logger.debug("Updating VirtualMachine Service");
00925 }
00926
00927 try {
00928 serviceUser.setService(s);
00929 } catch (ProActiveException e) {
00930 e.printStackTrace();
00931 logger.error("the given service " + s.getServiceName() +
00932 " cannot be set for class " + serviceUser.getUserClass());
00933 }
00934 }
00935 }
00936
00940 public void setVariableContract(VariableContract variableContract) {
00941 this.variableContract = variableContract;
00942 }
00943
00947 public VariableContract getVariableContract() {
00948 return this.variableContract;
00949 }
00950
00951 public void addTechnicalService(TechnicalServiceXmlType tsParsed)
00952 throws Exception {
00953 TechnicalService ts = (TechnicalService) tsParsed.getType().newInstance();
00954 ((TechnicalService) ts).init(tsParsed.getArgs());
00955 ((TechnicalServiceWrapper) this.technicalServiceMapping.get(tsParsed.getId())).setTs(ts);
00956 }
00957
00958 public TechnicalService getTechnicalService(
00959 String technicalServiceId) {
00960 TechnicalService ts = this.technicalServiceMapping.get(technicalServiceId);
00961
00962 if (ts == null) {
00963 ts = new TechnicalServiceWrapper();
00964 this.technicalServiceMapping.put(technicalServiceId, ts);
00965 }
00966
00967 return ts;
00968 }
00969 }