package pipe.actions;
import pipe.actions.gui.GuiAction;
import java.awt.event.ActionEvent;
/**
* @author Alex Charalambous, June 2010: Groups any transitions that have
* the same inputs and outputs. Only does anything if this is a
* coloured petri net
* @author yufeiwang (minor change)
*/
public class GroupTransitionsAction extends GuiAction
{
public GroupTransitionsAction()
{
super("groupTransitions", "Group any possible transitions", "shift ctrl G");
}
public void actionPerformed(ActionEvent e)
{
/* NOTE: With the current implementation we must clear the undo
* history before performing this action otherwise undoing a
* previous grouping could cause a mixup. In the future this
* should all be done as a single undo transaction.
*/
// PipeApplicationView applicationView = ApplicationSettings.getApplicationView();
// PipeApplicationController controller = ApplicationSettings.getApplicationController();
// PetriNetController petriNetController = controller.getActivePetriNetController();
// petriNetController.getHistoryManager().clear();
//
// LinkedList<GroupTransitionView> newGroupTransitionViews = new LinkedList<GroupTransitionView>();
// System.out.println(applicationView.getCurrentPetriNetView().getTokenViews().size());
// if(applicationView.getCurrentPetriNetView().getTokenViews().size() > 1)
// {
// PetriNetTab petriNetTab = applicationView.getCurrentTab();
// PetriNetView model = applicationView.getCurrentPetriNetView();
// TransitionView[] transitionViews = model.getTransitionViews();
// Boolean firstAddition;
// for(int i = 0; i < transitionViews.length - 1; i++)
// {
// GroupTransitionView newGroupTransitionView = new GroupTransitionView(transitionViews[i], transitionViews[i].getModel().getX(), transitionViews[i].getModel().getY());
// firstAddition = true;
// if(!transitionViews[i].isGrouped())
// {
// for(int j = i + 1; j < transitionViews.length; j++)
// {
// if(!transitionViews[j].isGrouped())
// {
// boolean allSourcesAndTargetsMatch = true;
// for(ArcView arcViewFromT1 : transitionViews[i].outboundArcs())
// {
// boolean thisPairMatches = false;
// for(ArcView arcViewFromT2 : transitionViews[j].outboundArcs())
// {
// if(arcViewFromT2.getTarget().equals(arcViewFromT1.getTarget()))
// {
// thisPairMatches = true;
// break;
// }
// }
// if(!thisPairMatches)
// {
// allSourcesAndTargetsMatch = false;
// break;
// }
// }
// ArcView arcViewToT1 = transitionViews[i].inboundArcs().iterator().next();
// boolean thisPairMatches = false;
// for(ArcView arcViewToT2 : transitionViews[j].inboundArcs())
// {
// if(arcViewToT2.getSource().equals(
// arcViewToT1.getSource()))
// {
// thisPairMatches = true;
// break;
// }
// }
// if(!thisPairMatches)
// {
// allSourcesAndTargetsMatch = false;
// break;
// }
// if(allSourcesAndTargetsMatch)
// {
// // First entry in groupTransition. Hence initialize.
// if(!transitionViews[i].isGrouped())
// {
//
// // Add new input arcs to our new Grouped transition
// LinkedList<ArcView> arcsTo = transitionViews[i].inboundArcs();
// for(ArcView tempArcView : arcsTo)
// {
// ArcView newArcView = new NormalArcView(tempArcView.getStartPositionX(),
// tempArcView.getStartPositionY(),
// tempArcView.getArcPath().getPoint(1).getX(),
// tempArcView.getArcPath().getPoint(1).getY(),
// tempArcView.getSource(),
// newGroupTransitionView,
// new LinkedList<MarkingView>(), "", false, new NormalArc(tempArcView.getSource().getModel(), newGroupTransitionView.getModel(), new HashMap<Token, String>()), petriNetController);
// newGroupTransitionView.addInbound(newArcView);
// tempArcView.getSource().addOutbound(newArcView);
// newArcView.addToView(petriNetTab);
// }
//
// LinkedList<ArcView> arcsFrom = transitionViews[i].outboundArcs();
// for(ArcView tempArcView : arcsFrom)
// {
// ArcView newArcView = new NormalArcView(tempArcView.getStartPositionX(), tempArcView.getStartPositionY(),
// tempArcView.getArcPath().getPoint(1).getX(), tempArcView.getArcPath().getPoint(1).getY(), newGroupTransitionView, tempArcView.getTarget(),
// new LinkedList<MarkingView>(), "", false, new NormalArc(newGroupTransitionView.getModel(),tempArcView.getSource().getModel(), new HashMap<Token, String>()), petriNetController);
// newGroupTransitionView.addOutbound(newArcView);
// tempArcView.getTarget().addInbound(newArcView);
// newArcView.addToView(petriNetTab);
// }
// newGroupTransitionView
// .addTransition(transitionViews[i]);
// if(firstAddition)
// {
// newGroupTransitionView.setName(transitionViews[i].getId());
// firstAddition = false;
// }
// else
// {
// newGroupTransitionView.setName(newGroupTransitionView.getName() +
// "_" + transitionViews[i].getId());
// }
// transitionViews[i]
// .bindToGroup(newGroupTransitionView);
// newGroupTransitionViews.add(newGroupTransitionView);
// }
// newGroupTransitionView
// .addTransition(transitionViews[j]);
// if(firstAddition)
// {
// newGroupTransitionView.setName(transitionViews[j].getId());
// firstAddition = false;
// }
// else
// {
// newGroupTransitionView.setName(newGroupTransitionView.getName() +
// "_" + transitionViews[j].getId());
// }
// transitionViews[j]
// .bindToGroup(newGroupTransitionView);
// }
// }
//
// }
// }
// }
// for(GroupTransitionView groupTransitionView : newGroupTransitionViews)
// {
// for(TransitionView t : groupTransitionView.getTransitions())
// {
// t.hideFromCanvas();
// t.hideAssociatedArcs();
// }
// model.addPetriNetObject(groupTransitionView);
// petriNetTab.addNewPetriNetComponent(groupTransitionView);
// groupTransitionView.setVisible(true);
// }
//
// }
}
}