Skip to content
Snippets Groups Projects
Commit 7aa15a3e authored by Sebastian Ebert's avatar Sebastian Ebert
Browse files

rewrite: server proto -> server instances

parent 30d93711
Branches
No related tags found
No related merge requests found
......@@ -4,14 +4,29 @@ aspect ServiceRewrites {
when ( getType() != null && getType().equals(PnmlConstants.PAGE_TYPE_SERVER) && !getId().endsWith(PnmlConstants.PAGE_SERVER_INSTANCE_SUFFIX) )
to Page {
int serverCapacity = 0;
String serviceName = this.getServiceName();
DinerosTransition serviceTransition = null;
for(DinerosTransition dt : petriNet().allDinerosTransitions()){
if(dt.getStaticTransitionInformation().isServiceTransitionInformation()){
serverCapacity = dt.getStaticTransitionInformation().asServiceTransitionInformation().getServerChannel().getCapacity();
}
if(dt.getStaticTransitionInformation().isServiceTransitionInformation()){
if(dt.getStaticTransitionInformation().asServiceTransitionInformation().getServiceName().equals(serviceName)){
serviceTransition = dt;
}
}
if(serverCapacity != 0 && serviceTransition != null){
break;
}
}
de.tudresden.inf.st.pnml.flatter.transform.ToolspecificsTransformer
.updateServiceTransitionToolspecifics(petriNet(), serverCapacity, this);
Page containerPage = new Page();
containerPage.setId(this.getId() + "-" + PnmlConstants.PAGE_SERVER_CONTAINER_SUFFIX);
......
package de.tudresden.inf.st.pnml.flatter.transform;
import de.tudresden.inf.st.pnml.base.constants.PnmlConstants;
import de.tudresden.inf.st.pnml.jastadd.model.*;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
public class ToolspecificsTransformer {
/**
* Updates service transitions toolspecifics after service instance flattening
* serverInput/serverOutput remain unchanged because we know the new one are id + index + suffix
* only client-wise channels are updated
*/
public static void updateServiceTransitionToolspecifics(PetriNet petriNet, int serviceCapacity, Page sPage) {
Set<String> pagePlaceIds = new HashSet<>();
for (PnObject p : sPage.getObjectList()) {
if (p.isPlaceObject()) {
pagePlaceIds.add(p.getId());
}
}
for (DinerosTransition dt : petriNet.allDinerosTransitions()) {
if (dt.getStaticTransitionInformation().isServiceTransitionInformation()) {
for (ServiceChannel sc : dt.getMutableTransitionInformation().asServiceTransitionInformation().getClientChannelList()) {
if (pagePlaceIds.contains(sc.getRequestPlaceId().split("-")[0])
&& pagePlaceIds.contains(sc.getResponsePlaceId().split("-")[0])) {
if (dt.getMutableTransitionInformation() == null) {
dt.setMutableTransitionInformation(dt.getStaticTransitionInformation().asServiceTransitionInformation().treeCopyNoTransform());
}
for (int i = 0; i < serviceCapacity; i++) {
ServiceChannel newSc = new ServiceChannel();
newSc.setId(UUID.randomUUID().toString());
newSc.setRequestPlaceId(sc.getRequestPlaceId() + "-" + i + "-" + PnmlConstants.PAGE_SERVER_INSTANCE_SUFFIX);
newSc.setResponsePlaceId(sc.getResponsePlaceId() + "-" + i + "-" + PnmlConstants.PAGE_SERVER_INSTANCE_SUFFIX);
dt.getMutableTransitionInformation().asServiceTransitionInformation().getClientChannelList().add(newSc);
}
sc.removeSelf();
break;
}
}
}
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment