2013-11-22 18:28:12 +01:00
|
|
|
package org.gcube.portlets.user.reportgenerator.client;
|
2013-02-06 23:25:43 +01:00
|
|
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.Vector;
|
|
|
|
|
2013-11-22 18:28:12 +01:00
|
|
|
import org.gcube.application.reporting.component.ReportSequence;
|
|
|
|
import org.gcube.portlets.d4sreporting.common.shared.AttributeArea;
|
2013-03-01 19:42:50 +01:00
|
|
|
import org.gcube.portlets.d4sreporting.common.shared.BasicComponent;
|
|
|
|
import org.gcube.portlets.d4sreporting.common.shared.BasicSection;
|
2013-11-22 18:28:12 +01:00
|
|
|
import org.gcube.portlets.d4sreporting.common.shared.ComponentType;
|
|
|
|
import org.gcube.portlets.d4sreporting.common.shared.Model;
|
|
|
|
import org.gcube.portlets.d4sreporting.common.shared.RepeatableSequence;
|
|
|
|
import org.gcube.portlets.d4sreporting.common.shared.ReportReferences;
|
2013-02-06 23:25:43 +01:00
|
|
|
import org.gcube.portlets.user.reportgenerator.client.events.ItemSelectionEvent;
|
|
|
|
import org.gcube.portlets.user.reportgenerator.client.resources.FimesReportTreeStructureResources;
|
|
|
|
|
2013-11-22 18:28:12 +01:00
|
|
|
import com.google.gwt.dom.client.Style.Unit;
|
2013-02-06 23:25:43 +01:00
|
|
|
import com.google.gwt.event.logical.shared.SelectionEvent;
|
|
|
|
import com.google.gwt.event.logical.shared.SelectionHandler;
|
|
|
|
import com.google.gwt.event.shared.HandlerManager;
|
|
|
|
import com.google.gwt.resources.client.ImageResource;
|
2013-11-22 18:28:12 +01:00
|
|
|
import com.google.gwt.user.client.Timer;
|
2013-02-06 23:25:43 +01:00
|
|
|
import com.google.gwt.user.client.ui.HorizontalPanel;
|
|
|
|
import com.google.gwt.user.client.ui.Image;
|
|
|
|
import com.google.gwt.user.client.ui.Label;
|
|
|
|
import com.google.gwt.user.client.ui.ScrollPanel;
|
|
|
|
import com.google.gwt.user.client.ui.Tree;
|
|
|
|
import com.google.gwt.user.client.ui.TreeItem;
|
|
|
|
import com.google.gwt.user.client.ui.Widget;
|
|
|
|
|
|
|
|
|
2013-11-22 18:28:12 +01:00
|
|
|
public class ReportStructurePanel extends ScrollPanel{
|
2013-02-06 23:25:43 +01:00
|
|
|
|
2013-11-22 18:28:12 +01:00
|
|
|
Tree t;
|
|
|
|
TreeItem root ;
|
|
|
|
public ReportStructurePanel(final HandlerManager eventBus, final Model report, final String width, final String height) {
|
2013-02-06 23:25:43 +01:00
|
|
|
|
2013-11-22 18:28:12 +01:00
|
|
|
setWidth(width);
|
|
|
|
setHeight(height);
|
2013-02-06 23:25:43 +01:00
|
|
|
|
2013-11-22 18:28:12 +01:00
|
|
|
|
|
|
|
t = new Tree();
|
2013-02-06 23:25:43 +01:00
|
|
|
t.setAnimationEnabled(true);
|
2013-11-22 18:28:12 +01:00
|
|
|
root = loadReportRootTree(report);
|
|
|
|
t.addItem(root);
|
2013-02-06 23:25:43 +01:00
|
|
|
t.addSelectionHandler(new SelectionHandler<TreeItem>() {
|
|
|
|
|
|
|
|
@SuppressWarnings("unchecked")
|
|
|
|
public void onSelection(SelectionEvent<TreeItem> event) {
|
|
|
|
TreeItem item = event.getSelectedItem();
|
|
|
|
HashMap<String,Object> map = (HashMap<String, Object>)item.getUserObject();
|
|
|
|
eventBus.fireEvent(new ItemSelectionEvent(map));
|
|
|
|
}
|
|
|
|
});
|
2013-11-22 18:28:12 +01:00
|
|
|
|
2013-02-06 23:25:43 +01:00
|
|
|
this.add(t);
|
2013-11-22 18:28:12 +01:00
|
|
|
root.setState(true);
|
|
|
|
getElement().getStyle().setPaddingLeft(10, Unit.PX);
|
|
|
|
getElement().getStyle().setPaddingTop(10, Unit.PX);
|
|
|
|
|
|
|
|
expandtree();
|
|
|
|
}
|
|
|
|
|
|
|
|
private void expandtree() {
|
|
|
|
Timer t = new Timer() {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void run() {
|
|
|
|
for (int i = 0; i < root.getChildCount(); i++) {
|
|
|
|
root.getChild(i).setState(true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
t.schedule(500);
|
2013-02-06 23:25:43 +01:00
|
|
|
}
|
|
|
|
|
2013-03-01 19:42:50 +01:00
|
|
|
private TreeItem loadReportRootTree(final Model report) {
|
2013-02-06 23:25:43 +01:00
|
|
|
// Add root node
|
|
|
|
ImageResource image = FimesReportTreeStructureResources.INSTANCE.root();
|
2013-11-22 18:28:12 +01:00
|
|
|
HorizontalPanel node = createNodeWidget(image, "Structure View","gwt-label-rootTree");
|
2013-02-06 23:25:43 +01:00
|
|
|
TreeItem root = new TreeItem(node);
|
2013-11-22 18:28:12 +01:00
|
|
|
|
|
|
|
root.setStyleName("treeContainer");
|
|
|
|
|
2013-02-06 23:25:43 +01:00
|
|
|
|
2013-03-01 19:42:50 +01:00
|
|
|
Vector<BasicSection> sections = report.getSections();
|
2013-02-06 23:25:43 +01:00
|
|
|
for(int i = 1; i <= sections.size(); i++) {
|
2013-03-01 19:42:50 +01:00
|
|
|
BasicSection s = sections.get(i - 1);
|
2013-02-06 23:25:43 +01:00
|
|
|
// Add section item
|
|
|
|
image = FimesReportTreeStructureResources.INSTANCE.section();
|
2013-11-22 18:28:12 +01:00
|
|
|
node = createNodeWidget(image, "Section " + i,"gwt-label-sectionTree");
|
2013-02-06 23:25:43 +01:00
|
|
|
|
|
|
|
TreeItem sectionItem = addChildItemToParentItem(root, "Section", Integer.toString(i -1), node);
|
2013-11-22 18:28:12 +01:00
|
|
|
sectionItem.setState(true);
|
|
|
|
addItemsComponent(sectionItem, s.getComponents());
|
2013-02-06 23:25:43 +01:00
|
|
|
|
2013-11-22 18:28:12 +01:00
|
|
|
}
|
2013-02-06 23:25:43 +01:00
|
|
|
return root;
|
|
|
|
}
|
|
|
|
|
2013-11-22 18:28:12 +01:00
|
|
|
private void addItemsComponent(final TreeItem sectionItem,final List<BasicComponent> components ) {
|
2013-02-06 23:25:43 +01:00
|
|
|
|
|
|
|
for(int i = 0; i < components.size(); i++) {
|
2013-03-01 19:42:50 +01:00
|
|
|
BasicComponent c = components.get(i);
|
2013-02-06 23:25:43 +01:00
|
|
|
|
|
|
|
HorizontalPanel node = null;
|
|
|
|
switch (c.getType()) {
|
|
|
|
case TITLE: {
|
|
|
|
ImageResource image = FimesReportTreeStructureResources.INSTANCE.heading1();
|
|
|
|
node = createNodeWidget(image, (String)c.getPossibleContent(),"gwt-label-componentTree");
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case HEADING_1: {
|
|
|
|
ImageResource image = FimesReportTreeStructureResources.INSTANCE.heading1();
|
|
|
|
node = createNodeWidget(image, (String)c.getPossibleContent(),"gwt-label-componentTree");
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case HEADING_2: {
|
|
|
|
ImageResource image = FimesReportTreeStructureResources.INSTANCE.heading2();
|
|
|
|
node = createNodeWidget(image, (String)c.getPossibleContent(),"gwt-label-componentTree");
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case HEADING_3: {
|
|
|
|
ImageResource image = FimesReportTreeStructureResources.INSTANCE.heading3();
|
|
|
|
node = createNodeWidget(image, (String)c.getPossibleContent(),"gwt-label-componentTree");
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case HEADING_4: {
|
|
|
|
ImageResource image = FimesReportTreeStructureResources.INSTANCE.heading4();
|
|
|
|
node = createNodeWidget(image, (String)c.getPossibleContent(),"gwt-label-componentTree");
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case INSTRUCTION: {
|
2013-12-12 16:39:48 +01:00
|
|
|
// ImageResource image = FimesReportTreeStructureResources.INSTANCE.instructions();
|
|
|
|
// node = createNodeWidget(image, "Instructions","gwt-label-componentTree");
|
2013-02-06 23:25:43 +01:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
case COMMENT: {
|
|
|
|
ImageResource image = FimesReportTreeStructureResources.INSTANCE.comments();
|
|
|
|
node = createNodeWidget(image, "Comment","gwt-label-componentTree");
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case BODY: {
|
|
|
|
ImageResource image = FimesReportTreeStructureResources.INSTANCE.text();
|
|
|
|
node = createNodeWidget(image, "Text","gwt-label-componentTree");
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case DYNA_IMAGE: {
|
|
|
|
ImageResource image = FimesReportTreeStructureResources.INSTANCE.image();
|
|
|
|
node = createNodeWidget(image, "Image","gwt-label-componentTree");
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case FLEX_TABLE: {
|
|
|
|
ImageResource image = FimesReportTreeStructureResources.INSTANCE.table();
|
|
|
|
node = createNodeWidget(image, "Table","gwt-label-componentTree");
|
|
|
|
break;
|
|
|
|
}
|
2013-11-22 18:28:12 +01:00
|
|
|
case ATTRIBUTE_MULTI: {
|
|
|
|
AttributeArea ar = (AttributeArea) c.getPossibleContent();
|
|
|
|
ImageResource image = FimesReportTreeStructureResources.INSTANCE.checkbox();
|
|
|
|
node = createNodeWidget(image, ar.getAttrName(),"gwt-label-componentTree");
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case ATTRIBUTE_UNIQUE: {
|
|
|
|
AttributeArea ar = (AttributeArea) c.getPossibleContent();
|
|
|
|
ImageResource image = FimesReportTreeStructureResources.INSTANCE.radio();
|
|
|
|
node = createNodeWidget(image, ar.getAttrName(),"gwt-label-componentTree");
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case BODY_TABLE_IMAGE: {
|
|
|
|
RepeatableSequence rs = (RepeatableSequence) c.getPossibleContent();
|
|
|
|
addItemsComponent(sectionItem, rs.getGroupedComponents());
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case REPEAT_SEQUENCE: {
|
|
|
|
RepeatableSequence rs = (RepeatableSequence) c.getPossibleContent();
|
|
|
|
addItemsComponent(sectionItem, rs.getGroupedComponents());
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case REPORT_REFERENCE: {
|
|
|
|
ReportReferences rf = (ReportReferences) c.getPossibleContent();
|
|
|
|
ImageResource image = FimesReportTreeStructureResources.INSTANCE.reference();
|
|
|
|
node = createNodeWidget(image, rf.getRefType(),"gwt-label-componentTree");
|
2013-02-06 23:25:43 +01:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
case TOC:
|
|
|
|
// TODO
|
|
|
|
// componentItem = new TreeItem("TOC");
|
|
|
|
break;
|
|
|
|
case PAGEBREAK:
|
|
|
|
// TODO
|
|
|
|
// componentItem = new TreeItem("Pagebreak");
|
|
|
|
break;
|
|
|
|
case TIME_SERIES:
|
|
|
|
// TODO
|
|
|
|
//componentItem = new TreeItem("Time_Series");
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2013-11-22 18:28:12 +01:00
|
|
|
if (node != null && c.getType() != ComponentType.REPEAT_SEQUENCE) {
|
2013-02-06 23:25:43 +01:00
|
|
|
addChildItemToParentItem(sectionItem, "Component",
|
|
|
|
Integer.toString(i), node);
|
2013-11-22 18:28:12 +01:00
|
|
|
}
|
2013-02-06 23:25:43 +01:00
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private TreeItem addChildItemToParentItem(final TreeItem root, final String typeItem,
|
|
|
|
final String indexList, final Widget content) {
|
|
|
|
|
|
|
|
TreeItem item = new TreeItem(content);
|
|
|
|
// Create userObjet
|
|
|
|
HashMap<String, Object> map = new HashMap<String, Object>();
|
|
|
|
map.put("item",typeItem );
|
|
|
|
map.put("index", indexList);
|
|
|
|
map.put("parent", root.getUserObject());
|
|
|
|
item.setUserObject(map);
|
|
|
|
root.addItem(item);
|
|
|
|
return item;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Generates HTML for a tree item with an attached icon.
|
|
|
|
* @param imageResource the image resource to use
|
|
|
|
* @param title the title of the item
|
|
|
|
* @return the resultant HTML
|
|
|
|
*/
|
|
|
|
private HorizontalPanel createNodeWidget(ImageResource imageResource, String title,
|
|
|
|
String cssStyle) {
|
|
|
|
HorizontalPanel node = new HorizontalPanel();
|
2013-11-22 18:28:12 +01:00
|
|
|
|
2013-02-06 23:25:43 +01:00
|
|
|
Image image = new Image(imageResource);
|
|
|
|
image.setPixelSize(image.getWidth() + 5, image.getHeight());
|
|
|
|
node.add(image);
|
|
|
|
|
|
|
|
String shortTitle = title;
|
2013-11-25 17:12:01 +01:00
|
|
|
if (shortTitle.length() > 20)
|
|
|
|
shortTitle = shortTitle.substring(0,18) + "..";
|
2013-02-06 23:25:43 +01:00
|
|
|
|
|
|
|
Label text = new Label(shortTitle);
|
|
|
|
node.add(text);
|
|
|
|
return node;
|
|
|
|
}
|
|
|
|
}
|