EMMA Coverage Report (generated Sun Feb 05 10:43:15 CET 2012)
[all classes][de.uka.ipd.sdq.codegen.simucontroller.workflow.jobs]

COVERAGE SUMMARY FOR SOURCE FILE [TransformPCMForSensitivityAnalysisJob.java]

nameclass, %method, %block, %line, %
TransformPCMForSensitivityAnalysisJob.java0%   (0/1)0%   (0/9)0%   (0/252)0%   (0/69)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class TransformPCMForSensitivityAnalysisJob0%   (0/1)0%   (0/9)0%   (0/252)0%   (0/69)
TransformPCMForSensitivityAnalysisJob (AbstractSimulationWorkflowConfiguratio... 0%   (0/1)0%   (0/11)0%   (0/5)
alterObject (EObject, SensitivityAnalysisConfiguration): void 0%   (0/1)0%   (0/55)0%   (0/13)
applyParamterChange (SensitivityAnalysisConfiguration, PCMResourceSetPartitio... 0%   (0/1)0%   (0/85)0%   (0/21)
entityBasedEquals (EObject, EObject): boolean 0%   (0/1)0%   (0/51)0%   (0/15)
execute (IProgressMonitor): void 0%   (0/1)0%   (0/23)0%   (0/5)
findEObject (EObject, EObject): EObject 0%   (0/1)0%   (0/20)0%   (0/6)
getName (): String 0%   (0/1)0%   (0/2)0%   (0/1)
rollback (IProgressMonitor): void 0%   (0/1)0%   (0/1)0%   (0/1)
setBlackboard (MDSDBlackboard): void 0%   (0/1)0%   (0/4)0%   (0/2)

1package de.uka.ipd.sdq.codegen.simucontroller.workflow.jobs;
2 
3import java.util.Iterator;
4import java.util.List;
5 
6import org.apache.log4j.Logger;
7import org.eclipse.core.runtime.CoreException;
8import org.eclipse.core.runtime.IProgressMonitor;
9import org.eclipse.emf.common.util.URI;
10import org.eclipse.emf.ecore.EClass;
11import org.eclipse.emf.ecore.EObject;
12import org.eclipse.emf.ecore.resource.Resource;
13import org.eclipse.emf.ecore.resource.ResourceSet;
14import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
15 
16import de.uka.ipd.sdq.codegen.simucontroller.runconfig.AbstractSimulationWorkflowConfiguration;
17import de.uka.ipd.sdq.pcm.core.PCMRandomVariable;
18import de.uka.ipd.sdq.pcm.core.entity.Entity;
19import de.uka.ipd.sdq.pcm.usagemodel.ClosedWorkload;
20import de.uka.ipd.sdq.pcm.usagemodel.OpenWorkload;
21import de.uka.ipd.sdq.workflow.IBlackboardInteractingJob;
22import de.uka.ipd.sdq.workflow.exceptions.JobFailedException;
23import de.uka.ipd.sdq.workflow.exceptions.RollbackFailedException;
24import de.uka.ipd.sdq.workflow.exceptions.UserCanceledException;
25import de.uka.ipd.sdq.workflow.mdsd.blackboard.MDSDBlackboard;
26import de.uka.ipd.sdq.workflow.pcm.blackboard.PCMResourceSetPartition;
27import de.uka.ipd.sdq.workflow.pcm.jobs.LoadPCMModelsIntoBlackboardJob;
28import de.uka.ipd.sdq.workflow.pcm.runconfig.SensitivityAnalysisConfiguration;
29 
30public class TransformPCMForSensitivityAnalysisJob implements
31                IBlackboardInteractingJob<MDSDBlackboard> {
32 
33        private MDSDBlackboard blackboard;
34        private Logger logger = Logger
35                        .getLogger(TransformPCMForSensitivityAnalysisJob.class);
36        private List<SensitivityAnalysisConfiguration> sconfList;
37 
38        public TransformPCMForSensitivityAnalysisJob(
39                        AbstractSimulationWorkflowConfiguration configuration) throws CoreException {
40                super();
41                this.sconfList = configuration.getSensitivityAnalysisConfigurations();
42        }
43 
44        /*
45         * (non-Javadoc)
46         *
47         * @see
48         * de.uka.ipd.sdq.codegen.workflow.IBlackboardInteractingJob#setBlackbard
49         * (de.uka.ipd.sdq.codegen.workflow.Blackboard)
50         */
51        public void setBlackboard(MDSDBlackboard blackboard) {
52                this.blackboard = blackboard;
53        }
54 
55        /*
56         * (non-Javadoc)
57         *
58         * @see
59         * de.uka.ipd.sdq.codegen.workflow.IJob#execute(org.eclipse.core.runtime
60         * .IProgressMonitor)
61         */
62        public void execute(IProgressMonitor monitor) throws JobFailedException,
63                        UserCanceledException {
64                PCMResourceSetPartition pcmPartition = (PCMResourceSetPartition) this.blackboard
65                                .getPartition(LoadPCMModelsIntoBlackboardJob.PCM_MODELS_PARTITION_ID);
66 
67                for (SensitivityAnalysisConfiguration sconf : this.sconfList){
68                        applyParamterChange(sconf, pcmPartition);
69                }
70 
71        }
72 
73        private void applyParamterChange(SensitivityAnalysisConfiguration sconf, PCMResourceSetPartition pcmPartition)
74                        throws JobFailedException {
75                if (sconf.getVariable() != null && sconf.getVariable().equals(""))
76                        throw new JobFailedException(
77                                        "Bad Sensitivity Analysis Job Configuration, no variable specified.");
78 
79                URI uri = URI.createURI(sconf.getVariable());
80 
81                ResourceSet rs = new ResourceSetImpl();
82                Resource resource = rs.getResource(uri, true);
83                String uriString = sconf.getVariable();
84                String varUri = uriString.substring(uriString.indexOf("#")+1);
85                EObject variableToChange = resource.getEObject(varUri);
86 
87                EObject o = null;
88                for (Resource r : pcmPartition.getResourceSet().getResources()) {
89                        if (o == null) {
90                                o = findEObject(r.getContents().get(0), variableToChange);
91                                if (o != null) {
92                                        logger
93                                                        .info("Altering PCM variable for sensitivity analysis");
94                                        alterObject(o, sconf);
95                                }
96                        }
97                }
98                if (o == null)
99                        throw new JobFailedException(
100                                        "Sensistivity analaysis transformation was unable to find the sensitivity variable");
101        }
102 
103        public void rollback(IProgressMonitor monitor)
104                        throws RollbackFailedException {
105        }
106 
107        public String getName() {
108                return "Inplace Transformation job for Sensitivity Analysis";
109        }
110 
111        // ---
112 
113        private void alterObject(EObject o, SensitivityAnalysisConfiguration sconf) {
114                //DecimalFormat df = new DecimalFormat("0.00000000", new DecimalFormatSymbols(Locale.US));
115                //String value = df.format( sconf.getCurrent() );
116 
117                double value = sconf.getCurrent();
118 
119                if (o instanceof PCMRandomVariable) {
120                        PCMRandomVariable pcmRandVar = (PCMRandomVariable) o;
121                        if ((int)value == value){
122                                pcmRandVar.setSpecification(String.valueOf((int)value));
123                        } else {
124                                pcmRandVar.setSpecification(String.valueOf(value));
125                        }
126 
127                }
128                if (o instanceof ClosedWorkload) {
129                        ClosedWorkload cw = (ClosedWorkload) o;
130                        cw.setPopulation((int)sconf.getCurrent());
131                }
132                if (o instanceof OpenWorkload) {
133                        OpenWorkload ow = (OpenWorkload) o;
134                        ow.getInterArrivalTime_OpenWorkload().setSpecification("Exp(" + value + ")");
135                }
136        }
137 
138        /**
139         * Finds object in tree based on the {@link #entityBasedEquals(EObject, EObject)} equality definition.
140         *
141         * @param objectTreeToSearchIn
142         * @param eObjectToFind
143         * @return
144         */
145        private EObject findEObject(EObject objectTreeToSearchIn, EObject eObjectToFind) {
146                Iterator<EObject> it = objectTreeToSearchIn.eAllContents();
147 
148                while (it.hasNext()) {
149                        EObject eo = it.next();
150 
151                        if (entityBasedEquals(eo, eObjectToFind)) {
152                                        return eo;
153                        }
154                }
155                return null;
156        }
157 
158        /**
159         * Finds object based on the following recursive equality definition:
160         *
161         * Two objects are equal iff (1) they have both instance of {@link Entity}
162         * and have the same id, or (2) they are not both instances of
163         * {@link Entity} and they are instances of the same {@link EClass} and
164         * their parents are of equal {@link EClass} and their parents are equal
165         * based on this definition.
166         */
167        private boolean entityBasedEquals(EObject eObject1, EObject eObject2) {
168 
169                if (eObject1 == eObject2){
170                        return true;
171                }
172 
173                if (eObject1 != null && eObject2 != null){
174 
175                        if (eObject1 instanceof Entity && eObject2 instanceof Entity) {
176                                Entity entity1 = (Entity) eObject1;
177                                Entity entity2 = (Entity) eObject2;
178 
179                                if (entity1.getId().equals(entity2.getId())) {
180                                        return true;
181                                }
182 
183                        } else {
184 
185                                //they must have the same class.
186                                EClass eClass1 = eObject1.eClass();
187                            if (eClass1 != eObject2.eClass()){
188                                    return false;
189                            }
190 
191                                // objects could be the same, check parents
192                            EObject parent1 = eObject1.eContainer();
193                            EObject parent2 = eObject2.eContainer();
194 
195                                return entityBasedEquals(parent1, parent2);
196 
197                        }
198 
199 
200                }
201 
202                return false;
203 
204        }
205 
206}

[all classes][de.uka.ipd.sdq.codegen.simucontroller.workflow.jobs]
EMMA 2.0.9414 (unsupported private build) (C) Vladimir Roubtsov