package org.gcube.portlets.user.reportgenerator.client.targets; import java.util.ArrayList; import org.gcube.portlets.d4sreporting.common.shared.Tuple; import org.gcube.portlets.d4sreporting.common.shared.RepeatableSequence; import org.gcube.portlets.user.reportgenerator.client.Presenter.Presenter; import org.gcube.portlets.user.reportgenerator.client.model.TemplateComponent; import org.gcube.portlets.user.reportgenerator.shared.VMETypeIdentifier; import com.google.gwt.core.shared.GWT; import com.google.gwt.event.dom.client.HasClickHandlers; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.VerticalPanel; /** * * @author massi * */ public class ClientReportReference extends Composite implements ClientSequence { protected ArrayList groupedComponents = new ArrayList(); private VerticalPanel myPanel = new VerticalPanel(); private String refType; private ArrayList tupleList; private SequenceWidget first; private Presenter p; /** * s * @param p * @param ms */ public ClientReportReference(Presenter p, String refType, ArrayList tupleList) { this.p = p; this.refType = refType; this.tupleList = tupleList; for (Tuple seq : tupleList) { if (myPanel.getWidgetCount()==0) { // if is the first one first = getMasterSequence(seq); myPanel.add(first); } else { SequenceWidget seqW = new SequenceWidget(p, this, seq, false, false); myPanel.add(seqW); } } initWidget(myPanel); } /** * the first seq has to behave differently */ private SequenceWidget getMasterSequence(RepeatableSequence seq) { SequenceWidget toReturn = new SequenceWidget(p, this, seq, true, false); if (tupleList.size() == 1) { toReturn.enableClear(); } return toReturn; } public ArrayList getTupleList() { return tupleList; } public void setTupleList(ArrayList tupleList) { this.tupleList = tupleList; } @Override public ArrayList getGroupedComponents() { return groupedComponents; } @Override public boolean add(String id, RepeatableSequence sequence) { if (first.isSelectNewEnabled()) { first = getMasterSequence(sequence); myPanel.clear(); myPanel.add(first); tupleList.clear(); } else { SequenceWidget seqW = new SequenceWidget(p, this, sequence, false, true); myPanel.add(seqW); first.hideClearAssociationButton(); } //needed for the model Tuple toAdd = new Tuple(id, sequence.getGroupedComponents()); tupleList.add(toAdd); return true; } @Override public SequenceWidget remove(SequenceWidget toRemove) { myPanel.remove(toRemove); for (TemplateComponent tc : toRemove.getSeqGroupedComponents()) { groupedComponents.remove(tc); } tupleList.remove(toRemove.getSequence()); if (tupleList.size() == 1) first.enableClear(); GWT.log("List Tuple Size = "+tupleList.size()); return toRemove; } @Override public void AddButtonClicked(RepeatableSequence sequence) { VMETypeIdentifier type2Pass = null; try { type2Pass = p.getTypeIdFromString(refType); } catch (Exception e) { e.printStackTrace(); } p.showVMERefAssociateDialog(type2Pass); p.setClientSequenceSelected(this); //important! } public String getRefType() { return refType; } }