bug TDI-24587 fixed: tXMLMap reaches 10K Windows Handle Limit

git-svn-id: http://talendforge.org/svn/tos/branches/branch-5_2@97480 f6f1c999-d317-4740-80b0-e6d1abc6f99e
This commit is contained in:
wchen
2013-01-30 01:57:15 +00:00
parent 244975b347
commit 15be0bb8de
22 changed files with 1049 additions and 228 deletions

View File

@@ -10,7 +10,6 @@ import org.talend.designer.xmlmap.model.emf.xmlmap.AbstractNode;
import org.talend.designer.xmlmap.model.emf.xmlmap.Connection;
import org.talend.designer.xmlmap.model.emf.xmlmap.NodeType;
import org.talend.designer.xmlmap.model.emf.xmlmap.OutputTreeNode;
import org.talend.designer.xmlmap.model.emf.xmlmap.OutputXmlTree;
import org.talend.designer.xmlmap.model.emf.xmlmap.TreeNode;
import org.talend.designer.xmlmap.model.emf.xmlmap.VarNode;
import org.talend.designer.xmlmap.model.emf.xmlmap.VarTable;
@@ -126,7 +125,6 @@ public class CreateDocChildrenCommand extends Command {
}
}
}
manager.refreshOutputTreeSchemaEditor((OutputXmlTree) XmlMapUtil.getAbstractInOutTree(targetOutputNode));
}
private void createConnection(AbstractNode sourceNode, AbstractNode targetNode) {

View File

@@ -75,13 +75,16 @@ public class XmlDropTargetListener extends AbstractTransferDropTargetListener {
}
}
@Override
public void dragEnter(DropTargetEvent event) {
}
@Override
public void dragLeave(DropTargetEvent event) {
}
@Override
public void dragOperationChanged(DropTargetEvent event) {
}
@@ -226,6 +229,7 @@ public class XmlDropTargetListener extends AbstractTransferDropTargetListener {
showTargetFeedback();
}
@Override
public void drop(DropTargetEvent event) {
setCurrentEvent(event);
eraseTargetFeedback();
@@ -314,24 +318,27 @@ public class XmlDropTargetListener extends AbstractTransferDropTargetListener {
if (getTargetEditPart() != null) {
Command command = getCommand();
if (command != null && command.canExecute())
if (command != null && command.canExecute()) {
getViewer().getEditDomain().getCommandStack().execute(command);
else
} else {
getCurrentEvent().detail = DND.DROP_NONE;
} else
}
} else {
getCurrentEvent().detail = DND.DROP_NONE;
}
selectAddedObject();
}
private void selectAddedObject() {
boolean added = false;
List newObjects = getCreateRequest().getNewObjects();
for (int i = 0; i < newObjects.size(); i++) {
Object model = newObjects.get(i);
EditPartViewer viewer = getViewer();
viewer.getControl().forceFocus();
Object editpart = viewer.getEditPartRegistry().get(model);
boolean added = false;
if (editpart instanceof EditPart) {
if (!added) {
// Force a layout first.

View File

@@ -68,6 +68,7 @@ public class XmlMapEditor extends GraphicalEditor {
this.mapperManager = mapperManager;
}
@Override
protected void createGraphicalViewer(final Composite parent) {
// rulerComp = new RulerComposite(parent, SWT.BORDER);
XmlMapGraphicViewer viewer = new XmlMapGraphicViewer();
@@ -84,6 +85,7 @@ public class XmlMapEditor extends GraphicalEditor {
/**
* @see org.eclipse.gef.commands.CommandStackListener#commandStackChanged(java.util.EventObject)
*/
@Override
public void commandStackChanged(EventObject event) {
firePropertyChange(IEditorPart.PROP_DIRTY);
super.commandStackChanged(event);
@@ -92,6 +94,7 @@ public class XmlMapEditor extends GraphicalEditor {
/**
* @see org.eclipse.gef.ui.parts.GraphicalEditor#createActions()
*/
@Override
protected void createActions() {
ImportTreeFromXml importAction = new ImportTreeFromXml(this, getGraphicalViewer().getControl().getShell());
@@ -99,12 +102,12 @@ public class XmlMapEditor extends GraphicalEditor {
getActionRegistry().registerAction(importAction);
getSelectionActions().add(importAction.getId());
CreateAttributeAction createAttribute = new CreateAttributeAction(this);
CreateAttributeAction createAttribute = new CreateAttributeAction(this, getGraphicalViewer());
createAttribute.setMapperManager(mapperManager);
getActionRegistry().registerAction(createAttribute);
getSelectionActions().add(createAttribute.getId());
CreateElementAction createElement = new CreateElementAction(this);
CreateElementAction createElement = new CreateElementAction(this, getGraphicalViewer());
createElement.setMapperManager(mapperManager);
getActionRegistry().registerAction(createElement);
getSelectionActions().add(createElement.getId());
@@ -129,7 +132,7 @@ public class XmlMapEditor extends GraphicalEditor {
getActionRegistry().registerAction(importFromRepository);
getSelectionActions().add(importFromRepository.getId());
CreateNameSpaceAction createNameSpaceInput = new CreateNameSpaceAction(this);
CreateNameSpaceAction createNameSpaceInput = new CreateNameSpaceAction(this, getGraphicalViewer());
createNameSpaceInput.setMapperManager(mapperManager);
getActionRegistry().registerAction(createNameSpaceInput);
getSelectionActions().add(createNameSpaceInput.getId());
@@ -168,6 +171,7 @@ public class XmlMapEditor extends GraphicalEditor {
/**
* @see org.eclipse.gef.ui.parts.GraphicalEditor#configureGraphicalViewer()
*/
@Override
protected void configureGraphicalViewer() {
super.configureGraphicalViewer();
getGraphicalViewer().setRootEditPart(new XmlMapScalableRootEditPart());
@@ -179,6 +183,7 @@ public class XmlMapEditor extends GraphicalEditor {
/**
* @see org.eclipse.gef.ui.parts.GraphicalEditor#initializeGraphicalViewer()
*/
@Override
protected void initializeGraphicalViewer() {
// getGraphicalViewer().setContents(getContents());
@@ -187,8 +192,6 @@ public class XmlMapEditor extends GraphicalEditor {
getGraphicalViewer().addDropTargetListener(new XmlDropTargetListener(getGraphicalViewer()));
getGraphicalViewer().addSelectionChangedListener(mapperManager);
getGraphicalViewer().setContextMenu(new MenueProvider(getGraphicalViewer()));
initializeActionRegistry();
}

View File

@@ -50,6 +50,7 @@ public class XmlMapGraphicViewer extends GraphicalViewerImpl {
super(coll);
}
@Override
public boolean accept(IFigure figure) {
EditPart editpart = null;
while (editpart == null && figure != null) {
@@ -62,6 +63,7 @@ public class XmlMapGraphicViewer extends GraphicalViewerImpl {
return getLightweightSystem().getRootFigure().findFigureAt(x, y, new ConditionalTreeSearch(exclude));
}
@Override
public void select(EditPart editpart) {
if (editpart instanceof VarTableEditPart) {
return;
@@ -74,8 +76,9 @@ public class XmlMapGraphicViewer extends GraphicalViewerImpl {
// set false to dispatch mouse release event ??? need or not mouseListeners is executed before selection change
// setRouteEventsToEditDomain(false);
if ((getSelectedEditParts().size() == 1) && (getSelectedEditParts().get(0) == editpart))
if ((getSelectedEditParts().size() == 1) && (getSelectedEditParts().get(0) == editpart)) {
return;
}
primDeselectAll(editpart);
appendSelection(editpart); // fireSelectionChanged() is called here
@@ -122,6 +125,10 @@ public class XmlMapGraphicViewer extends GraphicalViewerImpl {
public void setMapperManager(MapperManager mapperManager) {
this.mapperManager = mapperManager;
if (!selectionListeners.contains(mapperManager)) {
mapperManager.setGraphicalViewer(this);
addSelectionChangedListener(mapperManager);
}
}
public FiguresManager getFiguresManager() {

View File

@@ -15,14 +15,13 @@ package org.talend.designer.xmlmap.editor.actions;
import java.util.List;
import org.eclipse.emf.common.util.EList;
import org.eclipse.gef.GraphicalViewer;
import org.eclipse.gef.ui.actions.SelectionAction;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.window.Window;
import org.eclipse.ui.IWorkbenchPart;
import org.talend.designer.xmlmap.model.emf.xmlmap.InputXmlTree;
import org.talend.designer.xmlmap.model.emf.xmlmap.NodeType;
import org.talend.designer.xmlmap.model.emf.xmlmap.OutputXmlTree;
import org.talend.designer.xmlmap.model.emf.xmlmap.TreeNode;
import org.talend.designer.xmlmap.model.emf.xmlmap.XmlmapFactory;
import org.talend.designer.xmlmap.parts.TreeNodeEditPart;
@@ -43,8 +42,11 @@ public class CreateAttributeAction extends SelectionAction {
public static final String ID = "org.talend.designer.xmlmap.editor.actions.CreateAttributeAction";
public CreateAttributeAction(IWorkbenchPart part) {
private GraphicalViewer graphicViewer;
public CreateAttributeAction(IWorkbenchPart part, GraphicalViewer graphicViewer) {
super(part);
this.graphicViewer = graphicViewer;
setId(ID);
setText("Create Attribute");
}
@@ -121,17 +123,20 @@ public class CreateAttributeAction extends SelectionAction {
}
if (open == Window.OK && mapperManager != null) {
TreeNode docRoot = XmlMapUtil.getTreeNodeRoot(parent);
if (input) {
if (docRoot != null && docRoot.eContainer() instanceof InputXmlTree) {
mapperManager.refreshInputTreeSchemaEditor((InputXmlTree) docRoot.eContainer());
}
} else {
if (docRoot != null && docRoot.eContainer() instanceof OutputXmlTree) {
mapperManager.refreshOutputTreeSchemaEditor((OutputXmlTree) docRoot.eContainer());
}
// TreeNode docRoot = XmlMapUtil.getTreeNodeRoot(parent);
// if (input) {
// if (docRoot != null && docRoot.eContainer() instanceof InputXmlTree) {
// mapperManager.refreshInputTreeSchemaEditor((InputXmlTree) docRoot.eContainer());
// }
// } else {
// if (docRoot != null && docRoot.eContainer() instanceof OutputXmlTree) {
// mapperManager.refreshOutputTreeSchemaEditor((OutputXmlTree) docRoot.eContainer());
// }
// }
Object object = graphicViewer.getEditPartRegistry().get(treeNode);
if (object instanceof TreeNodeEditPart) {
graphicViewer.select((TreeNodeEditPart) object);
}
}
}

View File

@@ -15,6 +15,7 @@ package org.talend.designer.xmlmap.editor.actions;
import java.util.List;
import org.eclipse.emf.common.util.EList;
import org.eclipse.gef.GraphicalViewer;
import org.eclipse.gef.ui.actions.SelectionAction;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.dialogs.MessageDialog;
@@ -22,10 +23,8 @@ import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.window.Window;
import org.eclipse.ui.IWorkbenchPart;
import org.talend.designer.xmlmap.model.emf.xmlmap.Connection;
import org.talend.designer.xmlmap.model.emf.xmlmap.InputXmlTree;
import org.talend.designer.xmlmap.model.emf.xmlmap.NodeType;
import org.talend.designer.xmlmap.model.emf.xmlmap.OutputTreeNode;
import org.talend.designer.xmlmap.model.emf.xmlmap.OutputXmlTree;
import org.talend.designer.xmlmap.model.emf.xmlmap.TreeNode;
import org.talend.designer.xmlmap.model.emf.xmlmap.XmlmapFactory;
import org.talend.designer.xmlmap.parts.TreeNodeEditPart;
@@ -46,8 +45,11 @@ public class CreateElementAction extends SelectionAction {
public static final String ID = "org.talend.designer.xmlmap.editor.actions.CreateElementAction";
public CreateElementAction(IWorkbenchPart part) {
private GraphicalViewer graphicViewer;
public CreateElementAction(IWorkbenchPart part, GraphicalViewer graphicViewer) {
super(part);
this.graphicViewer = graphicViewer;
setId(ID);
setText("Create Sub-Element");
}
@@ -138,15 +140,19 @@ public class CreateElementAction extends SelectionAction {
}
if (open == Window.OK && mapperManager != null) {
TreeNode docRoot = XmlMapUtil.getTreeNodeRoot(parent);
if (input) {
if (docRoot != null && docRoot.eContainer() instanceof InputXmlTree) {
mapperManager.refreshInputTreeSchemaEditor((InputXmlTree) docRoot.eContainer());
}
} else {
if (docRoot != null && docRoot.eContainer() instanceof OutputXmlTree) {
mapperManager.refreshOutputTreeSchemaEditor((OutputXmlTree) docRoot.eContainer());
}
// TreeNode docRoot = XmlMapUtil.getTreeNodeRoot(parent);
// if (input) {
// if (docRoot != null && docRoot.eContainer() instanceof InputXmlTree) {
// mapperManager.refreshInputTreeSchemaEditor((InputXmlTree) docRoot.eContainer());
// }
// } else {
// if (docRoot != null && docRoot.eContainer() instanceof OutputXmlTree) {
// mapperManager.refreshOutputTreeSchemaEditor((OutputXmlTree) docRoot.eContainer());
// }
// }
Object object = graphicViewer.getEditPartRegistry().get(treeNode);
if (object instanceof TreeNodeEditPart) {
graphicViewer.select((TreeNodeEditPart) object);
}
}

View File

@@ -15,12 +15,11 @@ package org.talend.designer.xmlmap.editor.actions;
import java.util.List;
import org.eclipse.emf.common.util.EList;
import org.eclipse.gef.GraphicalViewer;
import org.eclipse.gef.ui.actions.SelectionAction;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.ui.IWorkbenchPart;
import org.talend.designer.xmlmap.model.emf.xmlmap.InputXmlTree;
import org.talend.designer.xmlmap.model.emf.xmlmap.NodeType;
import org.talend.designer.xmlmap.model.emf.xmlmap.OutputXmlTree;
import org.talend.designer.xmlmap.model.emf.xmlmap.TreeNode;
import org.talend.designer.xmlmap.model.emf.xmlmap.XmlmapFactory;
import org.talend.designer.xmlmap.parts.TreeNodeEditPart;
@@ -41,8 +40,11 @@ public class CreateNameSpaceAction extends SelectionAction {
public static final String ID = "org.talend.designer.xmlmap.editor.actions.CreateNameSapceInput";
public CreateNameSpaceAction(IWorkbenchPart part) {
private GraphicalViewer graphicViewer;
public CreateNameSpaceAction(IWorkbenchPart part, GraphicalViewer graphicViewer) {
super(part);
this.graphicViewer = graphicViewer;
setText("Set A Namespace");
setId(ID);
}
@@ -109,11 +111,15 @@ public class CreateNameSpaceAction extends SelectionAction {
// children.add(createdNode);
TreeNode docRoot = XmlMapUtil.getTreeNodeRoot(parent);
if (docRoot != null && docRoot.eContainer() instanceof OutputXmlTree) {
mapperManager.refreshOutputTreeSchemaEditor((OutputXmlTree) docRoot.eContainer());
} else if (docRoot != null && docRoot.eContainer() instanceof InputXmlTree) {
mapperManager.refreshInputTreeSchemaEditor((InputXmlTree) docRoot.eContainer());
// TreeNode docRoot = XmlMapUtil.getTreeNodeRoot(parent);
// if (docRoot != null && docRoot.eContainer() instanceof OutputXmlTree) {
// mapperManager.refreshOutputTreeSchemaEditor((OutputXmlTree) docRoot.eContainer());
// } else if (docRoot != null && docRoot.eContainer() instanceof InputXmlTree) {
// mapperManager.refreshInputTreeSchemaEditor((InputXmlTree) docRoot.eContainer());
// }
Object object = graphicViewer.getEditPartRegistry().get(createdNode);
if (object instanceof TreeNodeEditPart) {
graphicViewer.select((TreeNodeEditPart) object);
}
}

View File

@@ -20,9 +20,7 @@ import org.eclipse.gef.ui.actions.SelectionAction;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.ui.IWorkbenchPart;
import org.talend.designer.xmlmap.model.emf.xmlmap.AbstractInOutTree;
import org.talend.designer.xmlmap.model.emf.xmlmap.InputXmlTree;
import org.talend.designer.xmlmap.model.emf.xmlmap.OutputTreeNode;
import org.talend.designer.xmlmap.model.emf.xmlmap.OutputXmlTree;
import org.talend.designer.xmlmap.model.emf.xmlmap.TreeNode;
import org.talend.designer.xmlmap.parts.TreeNodeEditPart;
import org.talend.designer.xmlmap.ui.tabs.MapperManager;
@@ -138,16 +136,16 @@ public class DeleteTreeNodeAction extends SelectionAction {
}
if (mapperManager != null) {
if (input) {
if (docRoot != null && docRoot.eContainer() instanceof InputXmlTree) {
mapperManager.refreshInputTreeSchemaEditor((InputXmlTree) docRoot.eContainer());
}
} else {
if (docRoot != null && docRoot.eContainer() instanceof OutputXmlTree) {
mapperManager.refreshOutputTreeSchemaEditor((OutputXmlTree) docRoot.eContainer());
}
}
// if (input) {
// if (docRoot != null && docRoot.eContainer() instanceof InputXmlTree) {
// mapperManager.refreshInputTreeSchemaEditor((InputXmlTree) docRoot.eContainer());
// }
// } else {
// if (docRoot != null && docRoot.eContainer() instanceof OutputXmlTree) {
// mapperManager.refreshOutputTreeSchemaEditor((OutputXmlTree) docRoot.eContainer());
// }
// }
mapperManager.beanListModified(input);
if (docRoot != null && docRoot.eContainer() instanceof AbstractInOutTree) {
mapperManager.getProblemsAnalyser().checkProblems((AbstractInOutTree) docRoot.eContainer());
mapperManager.getMapperUI().updateStatusBar();

View File

@@ -186,10 +186,12 @@ public class ImportTreeFromRepository extends SelectionAction {
AbstractInOutTree tree = null;
if (schemaNode.eContainer() instanceof InputXmlTree) {
XmlMapConnectionBuilder.rebuildLinks(schemaNode, mapperManager.getCopyOfMapData());
mapperManager.refreshInputTreeSchemaEditor((InputXmlTree) schemaNode.eContainer());
mapperManager.refreshTreeSchemaEditor((InputXmlTree) schemaNode.eContainer());
// mapperManager.refreshInputTreeSchemaEditor((InputXmlTree) schemaNode.eContainer());
tree = (InputXmlTree) schemaNode.eContainer();
} else if (schemaNode.eContainer() instanceof OutputXmlTree) {
mapperManager.refreshOutputTreeSchemaEditor((OutputXmlTree) schemaNode.eContainer());
// mapperManager.refreshOutputTreeSchemaEditor((OutputXmlTree) schemaNode.eContainer());
mapperManager.refreshTreeSchemaEditor((OutputXmlTree) schemaNode.eContainer());
tree = (OutputXmlTree) schemaNode.eContainer();
}
if (tree != null) {
@@ -681,7 +683,7 @@ public class ImportTreeFromRepository extends SelectionAction {
if (targetAbsolutePath == null) {
targetAbsolutePath = new ArrayList<String>();
targetAbsolutePath.add(absoluteXPathQuery);
Pattern regex = Pattern.compile(RELATIVE_PATH_PATTERN, Pattern.CANON_EQ | Pattern.CASE_INSENSITIVE //$NON-NLS-1$
Pattern regex = Pattern.compile(RELATIVE_PATH_PATTERN, Pattern.CANON_EQ | Pattern.CASE_INSENSITIVE
| Pattern.MULTILINE);
for (Object obj : schemaTargets) {
String relativeXPathQuery = "";
@@ -777,7 +779,7 @@ public class ImportTreeFromRepository extends SelectionAction {
}
private File getTempTemplateXSDFile() {
IPath tempPath = new Path(System.getProperty("user.dir")).append("temp"); //$NON-NLS-1$ //$NON-NLS-1$ //$NON-NLS-2$
IPath tempPath = new Path(System.getProperty("user.dir")).append("temp"); //$NON-NLS-1$ //$NON-NLS-2$
File tempFile = tempPath.toFile();
if (!tempFile.exists()) {
tempFile.mkdirs();

View File

@@ -119,9 +119,11 @@ public class ImportTreeFromXml extends SelectionAction {
if (parentNode.eContainer() instanceof InputXmlTree) {
XmlMapConnectionBuilder.rebuildLinks(parentNode, mapperManager.getCopyOfMapData());
mapperManager.refreshInputTreeSchemaEditor((InputXmlTree) parentNode.eContainer());
mapperManager.refreshTreeSchemaEditor((InputXmlTree) parentNode.eContainer());
// mapperManager.refreshInputTreeSchemaEditor((InputXmlTree) parentNode.eContainer());
} else if (parentNode.eContainer() instanceof OutputXmlTree) {
mapperManager.refreshOutputTreeSchemaEditor((OutputXmlTree) parentNode.eContainer());
// mapperManager.refreshOutputTreeSchemaEditor((OutputXmlTree) parentNode.eContainer());
mapperManager.refreshTreeSchemaEditor((OutputXmlTree) parentNode.eContainer());
}
if (treeNodeRoot != null && treeNodeRoot.eContainer() instanceof AbstractInOutTree) {
mapperManager.getProblemsAnalyser().checkProblems((AbstractInOutTree) treeNodeRoot.eContainer());

View File

@@ -29,7 +29,6 @@ import org.eclipse.draw2d.TextUtilities;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Insets;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.talend.designer.xmlmap.ui.resource.ColorInfo;
@@ -72,10 +71,7 @@ public class ToolBarButtonImageFigure extends ImageFigure {
setBorder(new MarginBorder(2));
if (image != null) {
this.enabledImage = image;
this.disabledImage = new Image(image.getDevice(), image, SWT.IMAGE_DISABLE);
ImageProviderMapper.cacheDisabledImage(disabledImage);
}
}
/**
@@ -84,15 +80,18 @@ public class ToolBarButtonImageFigure extends ImageFigure {
protected void initlistener() {
listener = new MouseMotionListener() {
@Override
public void mouseMoved(MouseEvent me) {
}
@Override
public void mouseHover(MouseEvent me) {
addLineBorder();
setHoverColor();
}
@Override
public void mouseExited(MouseEvent me) {
if (Clickable.STYLE_TOGGLE == getStyle()) {
if (!isSelected()) {
@@ -105,10 +104,12 @@ public class ToolBarButtonImageFigure extends ImageFigure {
}
}
@Override
public void mouseEntered(MouseEvent me) {
}
@Override
public void mouseDragged(MouseEvent me) {
}
@@ -117,14 +118,17 @@ public class ToolBarButtonImageFigure extends ImageFigure {
this.addMouseListener(new MouseListener() {
@Override
public void mousePressed(MouseEvent me) {
toolBarButtonPressed(me);
}
@Override
public void mouseReleased(MouseEvent me) {
// TODO Auto-generated method stub
}
@Override
public void mouseDoubleClicked(MouseEvent me) {
// TODO Auto-generated method stub
@@ -172,6 +176,7 @@ public class ToolBarButtonImageFigure extends ImageFigure {
}
@Override
public void setEnabled(boolean value) {
super.setEnabled(value);
changeImage();
@@ -183,6 +188,7 @@ public class ToolBarButtonImageFigure extends ImageFigure {
setImage(enabledImage);
}
} else {
this.disabledImage = ImageProviderMapper.getDisabledImage(enabledImage);
if (getImage() != disabledImage) {
setImage(disabledImage);
}
@@ -213,6 +219,7 @@ public class ToolBarButtonImageFigure extends ImageFigure {
/**
* @return The Image that this Figure displays
*/
@Override
public Image getImage() {
return img;
}
@@ -222,6 +229,7 @@ public class ToolBarButtonImageFigure extends ImageFigure {
*
* @see org.eclipse.draw2d.Figure#getPreferredSize(int, int)
*/
@Override
public Dimension getPreferredSize(int wHint, int hHint) {
Insets i = getInsets();
@@ -236,8 +244,9 @@ public class ToolBarButtonImageFigure extends ImageFigure {
protected Dimension calculateLabelSize(Dimension txtSize) {
int gap = getIconTextGap();
if (getText().equals("")) //$NON-NLS-1$
if (getText().equals("")) {
gap = 0;
}
Dimension d = new Dimension(0, 0);
d.width = gap + txtSize.width;
d.height = txtSize.height;
@@ -248,11 +257,14 @@ public class ToolBarButtonImageFigure extends ImageFigure {
/**
* @see org.eclipse.draw2d.Figure#paintFigure(Graphics)
*/
@Override
protected void paintFigure(Graphics graphics) {
if (isOpaque())
if (isOpaque()) {
graphics.fillRectangle(getBounds());
if (getBorder() instanceof AbstractBackground)
}
if (getBorder() instanceof AbstractBackground) {
((AbstractBackground) getBorder()).paintBackground(this, graphics, NO_INSETS);
}
int x, y;
Rectangle area = getClientArea();
@@ -302,6 +314,7 @@ public class ToolBarButtonImageFigure extends ImageFigure {
*
* @param flag A constant indicating the alignment
*/
@Override
public void setAlignment(int flag) {
alignment = flag;
}
@@ -313,22 +326,26 @@ public class ToolBarButtonImageFigure extends ImageFigure {
*
* @param image The Image to be displayed. It can be <code>null</code>.
*/
@Override
public void setImage(Image image) {
if (img == image)
if (img == image) {
return;
}
img = image;
if (img != null)
if (img != null) {
size = new Rectangle(image.getBounds()).getSize();
else
} else {
size = new Dimension();
}
revalidate();
notifyImageChanged();
repaint();
}
public void setIconTextGap(int gap) {
if (iconTextGap == gap)
if (iconTextGap == gap) {
return;
}
iconTextGap = gap;
repaint();
revalidate();
@@ -339,8 +356,9 @@ public class ToolBarButtonImageFigure extends ImageFigure {
}
protected Dimension getTextSize() {
if (textSize == null)
if (textSize == null) {
textSize = calculateTextSize();
}
return textSize;
}
@@ -362,6 +380,7 @@ public class ToolBarButtonImageFigure extends ImageFigure {
super(outer, inner);
}
@Override
public Insets getInsets(IFigure figure) {
Insets insets = null;
if (inner != null) {

View File

@@ -12,13 +12,12 @@
// ============================================================================
package org.talend.designer.xmlmap.ui.resource;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.talend.designer.xmlmap.XmlMapPlugin;
@@ -32,7 +31,7 @@ public class ImageProviderMapper {
private static Map<ImageInfo, Image> imageCache = new HashMap<ImageInfo, Image>();
private static List<Image> disabledImageCache = new ArrayList<Image>();
private static Map<Image, Image> disabledImageCache = new HashMap<Image, Image>();
public static Image getImage(ImageDescriptor desc) {
return desc.createImage();
@@ -52,14 +51,27 @@ public class ImageProviderMapper {
return ImageDescriptor.createFromFile(XmlMapPlugin.class, image.getPath());
}
public static void cacheDisabledImage(Image image) {
disabledImageCache.add(image);
public static Image getDisabledImage(Image image) {
Image disabledImage = disabledImageCache.get(image);
if (disabledImage != null) {
return disabledImage;
}
disabledImage = new Image(image.getDevice(), image, SWT.IMAGE_DISABLE);
disabledImageCache.put(image, disabledImage);
return disabledImage;
}
/**
* You can continue to use the provider after call this method.
*/
public static void releaseImages() {
for (Image image : disabledImageCache.values()) {
if (!image.isDisposed()) {
image.dispose();
}
}
disabledImageCache.clear();
Collection<Image> images = imageCache.values();
for (Image image : images) {
if (!image.isDisposed()) {
@@ -68,16 +80,18 @@ public class ImageProviderMapper {
}
imageCache.clear();
for (Image image : disabledImageCache) {
if (!image.isDisposed()) {
image.dispose();
}
}
disabledImageCache.clear();
}
public static void dispose(ImageInfo imageInfo) {
Image image = imageCache.get(imageInfo);
Image disabledImage = disabledImageCache.get(image);
if (disabledImage != null && !disabledImage.isDisposed()) {
disabledImage.dispose();
}
disabledImageCache.remove(image);
if (!image.isDisposed()) {
image.dispose();
}

View File

@@ -19,6 +19,8 @@ import java.util.List;
import java.util.Map;
import org.eclipse.emf.common.util.EList;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.GraphicalViewer;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
@@ -26,6 +28,7 @@ import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.talend.commons.ui.swt.extended.table.ExtendedTableModel;
import org.talend.commons.ui.swt.tableviewer.IModifiedBeanListener;
import org.talend.commons.ui.swt.tableviewer.ModifiedBeanEvent;
import org.talend.commons.ui.swt.tableviewer.TableViewerCreator;
import org.talend.commons.utils.data.list.IListenableListListener;
import org.talend.commons.utils.data.list.ListenableListEvent;
import org.talend.commons.utils.data.list.ListenableListEvent.TYPE;
@@ -53,7 +56,10 @@ import org.talend.designer.xmlmap.parts.TreeNodeEditPart;
import org.talend.designer.xmlmap.parts.directedit.ExpressionCellEditor;
import org.talend.designer.xmlmap.parts.directedit.XmlMapNodeDirectEditManager;
import org.talend.designer.xmlmap.ui.MapperUI;
import org.talend.designer.xmlmap.ui.tabs.table.TreeSchemaTableEditor;
import org.talend.designer.xmlmap.ui.tabs.table.TreeSchemaTableEntry;
import org.talend.designer.xmlmap.ui.tabs.table.XmlTreeSchemaTableView;
import org.talend.designer.xmlmap.ui.tabs.table.utils.SchemaTableUtils;
import org.talend.designer.xmlmap.util.XmlMapUtil;
import org.talend.designer.xmlmap.util.problem.ProblemsAnalyser;
@@ -78,6 +84,8 @@ public class MapperManager implements ISelectionChangedListener {
private XmlMapNodeDirectEditManager currentDirectEditManager;
private GraphicalViewer graphicalViewer;
private boolean isDieOnError;
public static final String ERROR_REJECT = "ErrorReject";//$NON-NLS-1$
@@ -207,15 +215,16 @@ public class MapperManager implements ISelectionChangedListener {
}
}
} else {
ExtendedTableModel<TreeSchemaTableEntry> oldModel = mapperUI.getTabFolderEditors().getInputTreeSchemaEditor()
.getExtendedTableModel();
if (oldModel != null && oldModel.getBeanCount() != 0) {
List<TreeSchemaTableEntry> treeSchemaEntrys = new ArrayList<TreeSchemaTableEntry>();
mapperUI.getTabFolderEditors().getInputTreeSchemaEditor()
.setExtendedControlModel(new ExtendedTableModel<TreeSchemaTableEntry>("Tree Schema", treeSchemaEntrys));
mapperUI.getTabFolderEditors().getInputTreeSchemaEditor().getTableViewerCreator().refresh();
}
refreshStyledTextEditor(null);
// ExtendedTableModel<TreeSchemaTableEntry> oldModel =
// mapperUI.getTabFolderEditors().getInputTreeSchemaEditor()
// .getExtendedTableModel();
// if (oldModel != null && oldModel.getBeanCount() != 0) {
// List<TreeSchemaTableEntry> treeSchemaEntrys = new ArrayList<TreeSchemaTableEntry>();
// mapperUI.getTabFolderEditors().getInputTreeSchemaEditor()
// .setExtendedControlModel(new ExtendedTableModel<TreeSchemaTableEntry>("Tree Schema", treeSchemaEntrys));
// mapperUI.getTabFolderEditors().getInputTreeSchemaEditor().getTableViewerCreator().refresh();
// }
// refreshStyledTextEditor(null);
}
}
@@ -230,6 +239,7 @@ public class MapperManager implements ISelectionChangedListener {
}
List<Integer> selectionIndices = new ArrayList<Integer>();
List<TreeNode> selectedDocChild = new ArrayList<TreeNode>();
Iterator iterator = selection.iterator();
while (iterator.hasNext()) {
Object obj = iterator.next();
@@ -237,6 +247,11 @@ public class MapperManager implements ISelectionChangedListener {
TreeNode model = (TreeNode) ((TreeNodeEditPart) obj).getModel();
if (model.eContainer() == selectedTree) {
selectionIndices.add(nodes.indexOf(model));
} else {
AbstractInOutTree abstractInOutTree = XmlMapUtil.getAbstractInOutTree(model);
if (abstractInOutTree == selectedTree) {
selectedDocChild.add(model);
}
}
}
}
@@ -246,21 +261,108 @@ public class MapperManager implements ISelectionChangedListener {
}
MetadataTableEditorView metaEditorView = null;
XmlTreeSchemaTableView treeEditorView = null;
if (selectedTree instanceof InputXmlTree) {
metaEditorView = mapperUI.getTabFolderEditors().getInputMetaEditorView();
treeEditorView = mapperUI.getTabFolderEditors().getInputTreeSchemaEditor();
} else {
metaEditorView = mapperUI.getTabFolderEditors().getOutputMetaEditorView();
treeEditorView = mapperUI.getTabFolderEditors().getOutputTreeSchemaEditor();
}
// fix the no more handler exception when select many columns
// if (metaEditorView != null) {
// metaEditorView.getTableViewerCreator().refresh();
// }
// metaEditorView.getExtendedTableViewer().getTableViewerCreator().getSelectionHelper().setSelection(selections);
metaEditorView.getTableViewerCreator().getSelectionHelper().setActiveFireSelectionChanged(false);
metaEditorView.getExtendedTableViewer().getTableViewerCreator().getSelectionHelper().setSelection(selections);
metaEditorView.getTableViewerCreator().getSelectionHelper().setActiveFireSelectionChanged(true);
metaEditorView.getExtendedToolbar().updateEnabledStateOfButtons();
// tree schema editor
// check if the first selection in selectedTree is displayed in current page ,if yes , select this record in
// tree schema editor,
// if no, change page
if (!selectedDocChild.isEmpty()) {
treeEditorView.getTableViewerCreator().getSelectionHelper().setActiveFireSelectionChanged(false);
TreeNode firstSelection = null;
if (selectedDocChild.size() > 1) {
selectionIndices = new ArrayList<Integer>();
List<TreeNode> allList = new ArrayList<TreeNode>();
for (TreeNode schemaNodes : nodes) {
if (XmlMapUtil.DOCUMENT.equals(schemaNodes.getType())) {
allList.addAll(SchemaTableUtils.getTreeSchemaEnties(schemaNodes));
}
}
int minIndex = allList.size();
for (TreeNode selected : selectedDocChild) {
int indexOf = allList.indexOf(selected);
if (indexOf != -1 && indexOf < minIndex) {
firstSelection = selected;
}
}
} else {
firstSelection = selectedDocChild.get(0);
}
treeEditorView.getExtendedTableModel().changePageIfNeeded(firstSelection);
// update selection
selectionIndices = new ArrayList<Integer>();
for (TreeNode selected : selectedDocChild) {
int indexOf = treeEditorView.getExtendedTableModel().getBeansList().indexOf(selected);
if (indexOf != -1) {
selectionIndices.add(indexOf);
}
}
selections = new int[selectionIndices.size()];
for (int i = 0; i < selectionIndices.size(); i++) {
selections[i] = selectionIndices.get(i);
}
treeEditorView.getExtendedTableViewer().getTableViewerCreator().getSelectionHelper().setSelection(selections);
treeEditorView.getTableViewerCreator().getSelectionHelper().setActiveFireSelectionChanged(true);
treeEditorView.getExtendedToolbar().updateEnabledStateOfButtons();
}
}
public void selectLinkedInputTableEntries(int[] selectionIndices, boolean isDoc) {
if (selectedInputTree != null) {
List nodes = null;
if (!isDoc) {
nodes = selectedInputTree.getNodes();
} else {
nodes = mapperUI.getTabFolderEditors().getInputTreeSchemaEditor().getExtendedTableModel().getBeansList();
}
selectLinkedTableEntries(nodes, selectionIndices);
}
}
public void selectLinkedOutputTableEntries(int[] selectionIndices, boolean isDoc) {
if (selectedOutputTree != null) {
List nodes = null;
if (!isDoc) {
nodes = selectedOutputTree.getNodes();
} else {
nodes = mapperUI.getTabFolderEditors().getOutputTreeSchemaEditor().getExtendedTableModel().getBeansList();
}
selectLinkedTableEntries(nodes, selectionIndices);
}
}
private void selectLinkedTableEntries(List nodes, int[] selectionIndices) {
if (getGraphicalViewer() != null) {
boolean select = false;
for (int selectionIndice : selectionIndices) {
if (selectionIndice < nodes.size()) {
Object object = getGraphicalViewer().getEditPartRegistry().get(nodes.get(selectionIndice));
if (object instanceof EditPart) {
if (!select) {
getGraphicalViewer().select((EditPart) object);
select = true;
} else {
getGraphicalViewer().appendSelection((EditPart) object);
}
}
}
}
}
}
public void refreshStyledTextEditor(AbstractNodePart nodePart) {
@@ -290,20 +392,6 @@ public class MapperManager implements ISelectionChangedListener {
mapperUI.getTabFolderEditors().getStyledTextHandler().setSelectedNodePart(nodePart);
}
public void refreshInputTreeSchemaEditor(InputXmlTree tree) {
ExtendedTableModel<TreeSchemaTableEntry> selectedInputTreeSchemaModel = getSelectedInputTreeSchemaModel(tree);
mapperUI.getTabFolderEditors().getInputTreeSchemaEditor().setExtendedControlModel(selectedInputTreeSchemaModel);
mapperUI.getTabFolderEditors().getInputTreeSchemaEditor().getTableViewerCreator().refresh();
}
public void refreshOutputTreeSchemaEditor(OutputXmlTree tree) {
ExtendedTableModel<TreeSchemaTableEntry> selectedInputTreeSchemaModel = getSelectedOutputTreeSchemaModel(tree);
if (mapperUI.getTabFolderEditors().getOutputTreeSchemaEditor() != null) {
mapperUI.getTabFolderEditors().getOutputTreeSchemaEditor().setExtendedControlModel(selectedInputTreeSchemaModel);
mapperUI.getTabFolderEditors().getOutputTreeSchemaEditor().getTableViewerCreator().refresh();
}
}
public void selectInputXmlTree(InputXmlTree inputTree) {
if (inputTree != selectedInputTree) {
selectedInputTree = inputTree;
@@ -370,7 +458,7 @@ public class MapperManager implements ISelectionChangedListener {
}
problemsAnalyser.checkProblems(selectedInputTree);
mapperUI.updateStatusBar();
refreshInputTreeSchemaEditor(selectedInputTree);
inputTreeSchemaBeanListModified();
}
}
} else if (AbstractMetadataTableEditorView.ID_COLUMN_KEY.equals(event.column.getId())) {
@@ -534,7 +622,7 @@ public class MapperManager implements ISelectionChangedListener {
inputMetaEditorView.setMetadataTableEditor(editor);
}
refreshInputTreeSchemaEditor(inputTree);
refreshTreeSchemaEditor(inputTree);
}
}
@@ -542,11 +630,11 @@ public class MapperManager implements ISelectionChangedListener {
private void processColumnNameChanged(final TreeNode treeNode) {
XmlMapUtil.updateXPathAndExpression(copyOfMapData, getMapperComponent().getExpressionManager(), treeNode,
treeNode.getName(), XmlMapUtil.getXPathLength(treeNode.getXpath()), true);
if (treeNode instanceof OutputTreeNode) {
getMapperUI().getTabFolderEditors().getOutputTreeSchemaEditor().refresh();
} else {
getMapperUI().getTabFolderEditors().getInputTreeSchemaEditor().refresh();
}
// if (treeNode instanceof OutputTreeNode) {
// getMapperUI().getTabFolderEditors().getOutputTreeSchemaEditor().refresh();
// } else {
// getMapperUI().getTabFolderEditors().getInputTreeSchemaEditor().refresh();
// }
}
public void selectOutputXmlTree(OutputXmlTree outputTree) {
@@ -633,7 +721,7 @@ public class MapperManager implements ISelectionChangedListener {
}
problemsAnalyser.checkProblems(selectedOutputTree);
mapperUI.updateStatusBar();
refreshOutputTreeSchemaEditor(selectedOutputTree);
outputTreeSchemaBeanListModified();
}
}
} else if (AbstractMetadataTableEditorView.ID_COLUMN_KEY.equals(event.column.getId())) {
@@ -779,7 +867,7 @@ public class MapperManager implements ISelectionChangedListener {
});
}
refreshOutputTreeSchemaEditor(outputTree);
refreshTreeSchemaEditor(outputTree);
}
}
@@ -813,4 +901,90 @@ public class MapperManager implements ISelectionChangedListener {
public InputXmlTree getMainInputTree() {
return mainInputTree;
}
/**
* Getter for graphicalViewer.
*
* @return the graphicalViewer
*/
public GraphicalViewer getGraphicalViewer() {
return this.graphicalViewer;
}
/**
* Sets the graphicalViewer.
*
* @param graphicalViewer the graphicalViewer to set
*/
public void setGraphicalViewer(GraphicalViewer graphicalViewer) {
this.graphicalViewer = graphicalViewer;
}
/**
*
* DOC refresh column when property of treenode is changed
*
* @param treeNode
*/
public void refreshTreeSchemaColumn(TreeNode treeNode) {
TableViewerCreator<TreeNode> tableViewerCreator = null;
if (treeNode instanceof OutputTreeNode) {
tableViewerCreator = mapperUI.getTabFolderEditors().getOutputTreeSchemaEditor().getTableViewerCreator();
} else {
tableViewerCreator = mapperUI.getTabFolderEditors().getInputTreeSchemaEditor().getTableViewerCreator();
}
if (tableViewerCreator != null && tableViewerCreator.getTable() != null && !tableViewerCreator.getTable().isDisposed()) {
tableViewerCreator.getTableViewer().refresh(treeNode);
}
}
private void outputTreeSchemaBeanListModified() {
ExtendedTableModel<TreeNode> extendedTableModel = mapperUI.getTabFolderEditors().getOutputTreeSchemaEditor()
.getExtendedTableModel();
if (extendedTableModel != null) {
((TreeSchemaTableEditor) extendedTableModel).beanListModified();
}
}
private void inputTreeSchemaBeanListModified() {
ExtendedTableModel<TreeNode> extendedTableModel = mapperUI.getTabFolderEditors().getInputTreeSchemaEditor()
.getExtendedTableModel();
if (extendedTableModel != null) {
((TreeSchemaTableEditor) extendedTableModel).beanListModified();
}
}
/**
*
* DOC Administrator Comment method "refreshTreeSchemaEditor".
*
* @param outputTree
*/
public void refreshTreeSchemaEditor(AbstractInOutTree outputTree) {
XmlTreeSchemaTableView outputTreeSchemaEditor = null;
if (outputTree instanceof InputXmlTree) {
outputTreeSchemaEditor = mapperUI.getTabFolderEditors().getInputTreeSchemaEditor();
} else {
outputTreeSchemaEditor = mapperUI.getTabFolderEditors().getOutputTreeSchemaEditor();
}
TreeSchemaTableEditor editor = new TreeSchemaTableEditor(outputTree);
outputTreeSchemaEditor.setExtendedTableModel(editor);
// editor.setModifiedBeanListenable(outputTreeSchemaEditor.getTableViewerCreator());
}
public void beanListModified(boolean input) {
XmlTreeSchemaTableView outputTreeSchemaEditor = null;
if (input) {
outputTreeSchemaEditor = mapperUI.getTabFolderEditors().getInputTreeSchemaEditor();
} else {
outputTreeSchemaEditor = mapperUI.getTabFolderEditors().getOutputTreeSchemaEditor();
}
outputTreeSchemaEditor.getExtendedTableModel().beanListModified();
}
}

View File

@@ -110,15 +110,50 @@ public class TabFolderEditors extends CTabFolder {
inOutMetaEditorContainer.setLayout(new RowLayout(SWT.HORIZONTAL));
item.setControl(inOutMetaEditorContainer);
// input metadata table view
inputMetaEditor = new XmlMapMetadataTableEditorView(inOutMetaEditorContainer, SWT.BORDER);
inputMetaEditor.initGraphicComponents();
// inputMetaEditor.getExtendedTableViewer().setCommandStack(commandStack);
ILineSelectionListener metadataEditorViewerSelectionChangedListener = new ILineSelectionListener() {
@Override
public void handle(LineSelectionEvent e) {
if (inputMetaEditor.getTableViewerCreator() == e.source && mapperManage.getGraphicalViewer() != null) {
if (inputMetaEditor.getExtendedTableViewer().isExecuteSelectionEvent()) {
mapperManage.selectLinkedInputTableEntries(inputMetaEditor.getTableViewerCreator().getTable()
.getSelectionIndices(), false);
}
}
}
};
inputMetaEditor.getTableViewerCreator().getSelectionHelper()
.addAfterSelectionListener(metadataEditorViewerSelectionChangedListener);
addListenersToInputButtons();
// output metadata table view
outputMetaEditor = new XmlMapMetadataTableEditorView(inOutMetaEditorContainer, SWT.BORDER);
outputMetaEditor.initGraphicComponents();
// outputMetaEditor.getExtendedTableViewer().setCommandStack(commandStack);
metadataEditorViewerSelectionChangedListener = new ILineSelectionListener() {
@Override
public void handle(LineSelectionEvent e) {
if (outputMetaEditor.getTableViewerCreator() == e.source && mapperManage.getGraphicalViewer() != null) {
if (outputMetaEditor.getExtendedTableViewer().isExecuteSelectionEvent()) {
mapperManage.selectLinkedOutputTableEntries(outputMetaEditor.getTableViewerCreator().getTable()
.getSelectionIndices(), false);
}
}
}
};
outputMetaEditor.getTableViewerCreator().getSelectionHelper()
.addAfterSelectionListener(metadataEditorViewerSelectionChangedListener);
addListenersToOutputButtons();
@@ -128,14 +163,48 @@ public class TabFolderEditors extends CTabFolder {
SashForm xmlTreeEditorContainer = new SashForm(tabFolderEditors, SWT.SMOOTH | SWT.HORIZONTAL | SWT.SHADOW_OUT);
xmlTreeEditorContainer.setLayout(new RowLayout(SWT.HORIZONTAL));
item.setControl(xmlTreeEditorContainer);
inputTreeSchemaEditor = new XmlTreeSchemaTableView(mapperManage.getSelectedInputTreeSchemaModel(null),
xmlTreeEditorContainer);
// input tree schema table view
inputTreeSchemaEditor = new XmlTreeSchemaTableView(xmlTreeEditorContainer, SWT.BORDER);
inputTreeSchemaEditor.initGraphicComponents();
outputTreeSchemaEditor = new OutputXmlTreeSchemaTableView(mapperManage.getSelectedOutputTreeSchemaModel(null),
xmlTreeEditorContainer);
metadataEditorViewerSelectionChangedListener = new ILineSelectionListener() {
@Override
public void handle(LineSelectionEvent e) {
if (inputTreeSchemaEditor.getTableViewerCreator() == e.source && mapperManage.getGraphicalViewer() != null) {
if (inputTreeSchemaEditor.getExtendedTableViewer().isExecuteSelectionEvent()) {
mapperManage.selectLinkedInputTableEntries(inputTreeSchemaEditor.getTableViewerCreator().getTable()
.getSelectionIndices(), true);
}
}
}
};
inputTreeSchemaEditor.getTableViewerCreator().getSelectionHelper()
.addAfterSelectionListener(metadataEditorViewerSelectionChangedListener);
// output tree schema table view
outputTreeSchemaEditor = new OutputXmlTreeSchemaTableView(xmlTreeEditorContainer, SWT.BORDER);
outputTreeSchemaEditor.initGraphicComponents();
metadataEditorViewerSelectionChangedListener = new ILineSelectionListener() {
@Override
public void handle(LineSelectionEvent e) {
if (outputTreeSchemaEditor.getTableViewerCreator() == e.source && mapperManage.getGraphicalViewer() != null) {
if (outputTreeSchemaEditor.getExtendedTableViewer().isExecuteSelectionEvent()) {
mapperManage.selectLinkedOutputTableEntries(outputTreeSchemaEditor.getTableViewerCreator().getTable()
.getSelectionIndices(), true);
}
}
}
};
outputTreeSchemaEditor.getTableViewerCreator().getSelectionHelper()
.addAfterSelectionListener(metadataEditorViewerSelectionChangedListener);
item = new CTabItem(tabFolderEditors, SWT.BORDER);
item.setText(Messages.getString("TabFolderEditors.ExpressionEditor.Title")); //$NON-NLS-1$

View File

@@ -13,21 +13,21 @@
package org.talend.designer.xmlmap.ui.tabs.table;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.talend.commons.ui.swt.extended.table.AbstractExtendedControlModel;
import org.talend.commons.ui.swt.extended.table.AbstractExtendedTableViewer;
import org.talend.commons.ui.swt.extended.table.ExtendedTableModel;
import org.talend.commons.ui.swt.advanced.dataeditor.AbstractDataTableEditorView;
import org.talend.commons.ui.swt.advanced.dataeditor.ExtendedToolbarView;
import org.talend.commons.ui.swt.tableviewer.TableViewerCreator;
import org.talend.designer.xmlmap.model.emf.xmlmap.NodeType;
import org.talend.designer.xmlmap.model.emf.xmlmap.TreeNode;
import org.talend.designer.xmlmap.ui.tabs.table.toolbar.XmlMapExtendedToolbarView;
import org.talend.designer.xmlmap.util.XmlMapUtil;
import org.talend.repository.ui.wizards.metadata.connection.files.xml.util.StringUtil;
/**
* WCHEN talend class global comment. Detailled comment
*/
public abstract class AbstractXmlTreeSchemaTableView extends AbstractExtendedTableViewer<TreeSchemaTableEntry> {
public abstract class AbstractXmlTreeSchemaTableView extends AbstractDataTableEditorView<TreeNode> {
public static final String ID_COLUMN_XPATH = "xpath";
@@ -39,48 +39,8 @@ public abstract class AbstractXmlTreeSchemaTableView extends AbstractExtendedTab
private Label titleLabel;
public AbstractXmlTreeSchemaTableView(ExtendedTableModel<TreeSchemaTableEntry> extendedTableModel, Composite parent,
boolean readOnly, boolean initTable) {
super(extendedTableModel, parent, readOnly, initTable);
this.parentComposite = parent;
}
public void initGraphicComponents() {
mainComposite = new Composite(parentComposite, SWT.NONE);
if (parentComposite.getBackground() != null && !parentComposite.getBackground().equals(mainComposite.getBackground())) {
mainComposite.setBackground(parentComposite.getBackground());
}
GridLayout layout = new GridLayout();
mainComposite.setLayout(layout);
titleLabel = new Label(mainComposite, SWT.NONE);
titleLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
if (parentComposite.getBackground() != null && !parentComposite.getBackground().equals(titleLabel.getBackground())) {
titleLabel.setBackground(parentComposite.getBackground());
}
if (getExtendedTableModel() != null) {
titleLabel.setText(getExtendedTableModel().getName());
}
initTable();
if (getExtendedControlModel() != null) {
initModelListeners();
}
}
/*
* (non-Javadoc)
*
* @see
* org.talend.commons.ui.swt.extended.table.AbstractExtendedControlViewer#setExtendedControlModel(org.talend.commons
* .ui.swt.extended.table.AbstractExtendedControlModel)
*/
@Override
public void setExtendedControlModel(AbstractExtendedControlModel model) {
super.setExtendedControlModel(model);
if (titleLabel != null) {
titleLabel.setText(model.getName());
}
public AbstractXmlTreeSchemaTableView(Composite parentComposite, int mainCompositeStyle) {
super(parentComposite, mainCompositeStyle, false);
}
protected String validateXPath(String newValue, int beanPosition) {
@@ -92,9 +52,9 @@ public abstract class AbstractXmlTreeSchemaTableView extends AbstractExtendedTab
isValidName = false;
return "Name can't be null";
}
TreeSchemaTableEntry bean = getExtendedTableModel().getBeansList().get(beanPosition);
TreeNode bean = getExtendedTableModel().getBeansList().get(beanPosition);
if (NodeType.NAME_SPACE == bean.getTreeNode().getNodeType()) {
if (NodeType.NAME_SPACE == bean.getNodeType()) {
final String validateNameSpace = validateNameSpace(newValue, beanPosition);
if (validateNameSpace != null) {
return validateNameSpace;
@@ -102,10 +62,10 @@ public abstract class AbstractXmlTreeSchemaTableView extends AbstractExtendedTab
}
if (!StringUtil.validateLabelForXML(newValue)) {
if (NodeType.ELEMENT == bean.getTreeNode().getNodeType()) {
if (NodeType.ELEMENT == bean.getNodeType()) {
isValidName = false;
return "Element name is invalid";
} else if (NodeType.ATTRIBUT == bean.getTreeNode().getNodeType()) {
} else if (NodeType.ATTRIBUT == bean.getNodeType()) {
isValidName = false;
return "Attribute name is invalid";
}
@@ -114,8 +74,8 @@ public abstract class AbstractXmlTreeSchemaTableView extends AbstractExtendedTab
return validateEntry(newValue, bean, beanPosition);
}
protected String validateEntry(String newValue, TreeSchemaTableEntry bean, int beanPosition) {
String newXPath = bean.getXPath();
protected String validateEntry(String newValue, TreeNode bean, int beanPosition) {
String newXPath = bean.getXpath();
newXPath = newXPath.substring(0, newXPath.lastIndexOf(bean.getName()));
newXPath = newXPath + newValue;
if (getExtendedTableModel() != null) {
@@ -123,8 +83,8 @@ public abstract class AbstractXmlTreeSchemaTableView extends AbstractExtendedTab
if (i == beanPosition) {
continue;
}
TreeSchemaTableEntry entry = getExtendedTableModel().getBeansList().get(i);
if (newXPath.equals(entry.getXPath())) {
TreeNode entry = getExtendedTableModel().getBeansList().get(i);
if (newXPath.equals(entry.getXpath())) {
isValidName = false;
return "Name alrady existed";
}
@@ -138,16 +98,6 @@ public abstract class AbstractXmlTreeSchemaTableView extends AbstractExtendedTab
this.getTableViewerCreator().getTableViewer().refresh();
}
/*
* (non-Javadoc)
*
* @see org.talend.commons.ui.swt.extended.table.AbstractExtendedControlViewer#getParentComposite()
*/
@Override
public Composite getParentComposite() {
return mainComposite;
}
protected String validateNameSpace(String newValue, int beanPosition) {
if ((newValue.indexOf("(") != -1 || newValue.indexOf(")") != -1)
&& !newValue.equals(XmlMapUtil.DEFAULT_NAME_SPACE_PREFIX)) {
@@ -160,8 +110,8 @@ public abstract class AbstractXmlTreeSchemaTableView extends AbstractExtendedTab
if (i == beanPosition) {
continue;
}
TreeSchemaTableEntry entry = getExtendedTableModel().getBeansList().get(i);
if (NodeType.NAME_SPACE == entry.getTreeNode().getNodeType() && newValue.equals(entry.getName())) {
TreeNode entry = getExtendedTableModel().getBeansList().get(i);
if (NodeType.NAME_SPACE == entry.getNodeType() && newValue.equals(entry.getName())) {
isValidName = false;
return "Namespace Prefix already exist";
}
@@ -172,4 +122,39 @@ public abstract class AbstractXmlTreeSchemaTableView extends AbstractExtendedTab
return null;
}
/*
* (non-Javadoc)
*
* @see org.talend.commons.ui.swt.advanced.dataeditor.AbstractDataTableEditorView#getExtendedTableModel()
*/
@Override
public TreeSchemaTableEditor getExtendedTableModel() {
// TODO Auto-generated method stub
return (TreeSchemaTableEditor) super.getExtendedTableModel();
}
/*
* (non-Javadoc)
*
* @see
* org.talend.commons.ui.swt.advanced.dataeditor.AbstractDataTableEditorView#setTableViewerCreatorOptions(org.talend
* .commons.ui.swt.tableviewer.TableViewerCreator)
*/
@Override
protected void setTableViewerCreatorOptions(TableViewerCreator<TreeNode> newTableViewerCreator) {
super.setTableViewerCreatorOptions(newTableViewerCreator);
// newTableViewerCreator.setLazyLoad(true);
}
/*
* (non-Javadoc)
*
* @see org.talend.commons.ui.swt.advanced.dataeditor.AbstractDataTableEditorView#initToolBar()
*/
@Override
protected ExtendedToolbarView initToolBar() {
return new XmlMapExtendedToolbarView(getMainComposite(), SWT.NONE, getExtendedTableViewer());
}
}

View File

@@ -13,7 +13,7 @@
package org.talend.designer.xmlmap.ui.tabs.table;
import org.eclipse.swt.widgets.Composite;
import org.talend.commons.ui.swt.extended.table.ExtendedTableModel;
import org.talend.designer.xmlmap.model.emf.xmlmap.TreeNode;
/**
* created by talend2 on 2012-8-8 Detailled comment
@@ -27,13 +27,13 @@ public class OutputXmlTreeSchemaTableView extends XmlTreeSchemaTableView {
* @param extendedTableModel
* @param parent
*/
public OutputXmlTreeSchemaTableView(ExtendedTableModel<TreeSchemaTableEntry> extendedTableModel, Composite parent) {
super(extendedTableModel, parent);
public OutputXmlTreeSchemaTableView(Composite parentComposite, int mainCompositeStyle) {
super(parentComposite, mainCompositeStyle);
// TODO Auto-generated constructor stub
}
@Override
protected String validateEntry(String newValue, TreeSchemaTableEntry bean, int beanPosition) {
protected String validateEntry(String newValue, TreeNode bean, int beanPosition) {
return null;
}

View File

@@ -0,0 +1,184 @@
// ============================================================================
//
// Copyright (C) 2006-2013 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package org.talend.designer.xmlmap.ui.tabs.table;
import java.util.ArrayList;
import java.util.List;
import org.talend.commons.ui.swt.extended.table.ExtendedTableModel;
import org.talend.designer.xmlmap.model.emf.xmlmap.AbstractInOutTree;
import org.talend.designer.xmlmap.model.emf.xmlmap.InputXmlTree;
import org.talend.designer.xmlmap.model.emf.xmlmap.OutputXmlTree;
import org.talend.designer.xmlmap.model.emf.xmlmap.TreeNode;
import org.talend.designer.xmlmap.ui.tabs.table.utils.SchemaTableUtils;
import org.talend.designer.xmlmap.util.XmlMapUtil;
/**
* created by wchen on 2013-1-23 Detailled comment
*
*/
public class TreeSchemaTableEditor extends ExtendedTableModel<TreeNode> {
AbstractInOutTree absTree;
int pageCount = 1;
int currentPage = 1;
int maxColumns = 100;
public TreeSchemaTableEditor(AbstractInOutTree absTree) {
this.absTree = absTree;
initData();
}
private void initData() {
registerDataList(getSelectedInputTreeSchemaModel());
}
private List<TreeNode> getSelectedInputTreeSchemaModel() {
List<TreeNode> beanList = new ArrayList<TreeNode>();
List<TreeNode> tableModel = getAllBeanList();
pageCount = tableModel.size() / maxColumns + (tableModel.size() % maxColumns == 0 ? 0 : 1);
if (currentPage <= pageCount) {
int startIndex = (currentPage - 1) * maxColumns;
int endIndex = currentPage * maxColumns - 1;
endIndex = Math.min(tableModel.size(), endIndex);
beanList.addAll(tableModel.subList(startIndex, endIndex));
}
return beanList;
}
private List<TreeNode> getAllBeanList() {
List<TreeNode> tableModel = new ArrayList<TreeNode>();
if (absTree != null) {
List<TreeNode> nodes = new ArrayList<TreeNode>();
if (absTree instanceof OutputXmlTree) {
nodes.addAll(((OutputXmlTree) absTree).getNodes());
} else {
nodes.addAll(((InputXmlTree) absTree).getNodes());
}
for (TreeNode node : nodes) {
if (XmlMapUtil.DOCUMENT.equals(node.getType())) {
tableModel.addAll(SchemaTableUtils.getTreeSchemaEnties(node));
}
}
}
return tableModel;
}
public void changePageIfNeeded(TreeNode firstSelection) {
List<TreeNode> updatedList = getSelectedInputTreeSchemaModel();
// update page
if (updatedList.contains(firstSelection)) {
List<TreeNode> beansList = getBeansList();
List<TreeNode> copyToRemove = new ArrayList<TreeNode>(beansList);
copyToRemove.removeAll(updatedList);
if (!copyToRemove.isEmpty()) {
removeAll(copyToRemove);
}
// check if any new node is added
for (int i = 0; i < updatedList.size(); i++) {
if (!beansList.contains(updatedList.get(i))) {
add(updatedList.get(i), i);
}
}
} else {
// change page
List<TreeNode> allBeanList = getAllBeanList();
int indexOf = allBeanList.indexOf(firstSelection);
if (indexOf != -1) {
currentPage = indexOf == 0 ? 1 : (indexOf / maxColumns + (indexOf % maxColumns == 0 ? 0 : 1));
}
removeAll();
addAll(getSelectedInputTreeSchemaModel());
}
}
//
public void beanListModified() {
List<TreeNode> beansList = getBeansList();
List<TreeNode> copyToRemove = new ArrayList<TreeNode>(beansList);
List<TreeNode> updatedList = getSelectedInputTreeSchemaModel();
copyToRemove.removeAll(updatedList);
if (!copyToRemove.isEmpty()) {
removeAll(copyToRemove);
}
// check if any new node is added
for (int i = 0; i < updatedList.size(); i++) {
if (!beansList.contains(updatedList.get(i))) {
add(updatedList.get(i), i);
}
}
}
/*
* (non-Javadoc)
*
* @see org.talend.commons.ui.swt.extended.table.AbstractExtendedControlModel#getName()
*/
@Override
public String getName() {
return absTree.getName();
}
public AbstractInOutTree getXmlTree() {
return absTree;
}
public void setMaxColumns(int maxColumns) {
this.maxColumns = maxColumns;
}
/**
* Sets the currentPage.
*
* @param currentPage the currentPage to set
*/
public void setCurrentPage(int page) {
int newPage = page;
if (newPage < 1) {
newPage = 1;
}
if (newPage > pageCount) {
newPage = pageCount;
}
if (this.currentPage != newPage) {
this.currentPage = newPage;
removeAll();
addAll(getSelectedInputTreeSchemaModel());
}
}
/**
* Getter for currentPage.
*
* @return the currentPage
*/
public int getCurrentPage() {
return this.currentPage;
}
/**
* Getter for pageCount.
*
* @return the pageCount
*/
public int getPageCount() {
return this.pageCount;
}
}

View File

@@ -22,7 +22,6 @@ import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Table;
import org.talend.commons.ui.runtime.image.EImage;
import org.talend.commons.ui.runtime.image.ImageProvider;
import org.talend.commons.ui.swt.extended.table.ExtendedTableModel;
import org.talend.commons.ui.swt.proposal.ContentProposalAdapterExtended;
import org.talend.commons.ui.swt.proposal.TextCellEditorWithProposal;
import org.talend.commons.ui.swt.tableviewer.CellEditorValueAdapterFactory;
@@ -38,6 +37,7 @@ import org.talend.commons.ui.swt.tableviewer.tableeditor.CheckboxTableEditorCont
import org.talend.commons.utils.data.bean.IBeanPropertyAccessors;
import org.talend.core.model.metadata.types.JavaTypesManager;
import org.talend.core.ui.proposal.JavaSimpleDateFormatProposalProvider;
import org.talend.designer.xmlmap.model.emf.xmlmap.TreeNode;
import org.talend.designer.xmlmap.model.emf.xmlmap.XmlMapData;
import org.talend.designer.xmlmap.ui.expressionutil.XmlMapExpressionManager;
import org.talend.designer.xmlmap.util.XmlMapUtil;
@@ -59,24 +59,26 @@ public class XmlTreeSchemaTableView extends AbstractXmlTreeSchemaTableView {
public static final Color READONLY_CELL_BG_COLOR = Display.getCurrent().getSystemColor(SWT.COLOR_GRAY);
public XmlTreeSchemaTableView(ExtendedTableModel<TreeSchemaTableEntry> extendedTableModel, Composite parent) {
super(extendedTableModel, parent, false, false);
public XmlTreeSchemaTableView(Composite parentComposite, int mainCompositeStyle) {
super(parentComposite, mainCompositeStyle);
}
@Override
protected void createColumns(final TableViewerCreator<TreeSchemaTableEntry> tableViewerCreator, Table table) {
protected void createColumns(final TableViewerCreator<TreeNode> tableViewerCreator, Table table) {
TableViewerCreatorColumn column = new TableViewerCreatorColumn(tableViewerCreator);
column.setTitle("XPath");
column.setId(ID_COLUMN_XPATH);
column.setWeight(20);
column.setModifiable(true);
column.setBeanPropertyAccessors(new IBeanPropertyAccessors<TreeSchemaTableEntry, Object>() {
column.setBeanPropertyAccessors(new IBeanPropertyAccessors<TreeNode, Object>() {
public Object get(TreeSchemaTableEntry bean) {
return bean.getXPath();
@Override
public Object get(TreeNode bean) {
return bean.getXpath();
}
public void set(TreeSchemaTableEntry bean, Object value) {
@Override
public void set(TreeNode bean, Object value) {
if (isValidName) {
bean.setName((String) value);
// String xPath = bean.getXPath();
@@ -91,11 +93,11 @@ public class XmlTreeSchemaTableView extends AbstractXmlTreeSchemaTableView {
// typedValue = xPath + bean.getName();
// }
// bean.setXPath(typedValue);
XmlMapData mapperData = XmlMapUtil.getXmlMapData(bean.getTreeNode());
XmlMapData mapperData = XmlMapUtil.getXmlMapData(bean);
XmlMapExpressionManager expressionManager = new XmlMapExpressionManager();
XmlMapUtil.updateXPathAndExpression(mapperData, expressionManager, bean.getTreeNode(), bean.getName(),
XmlMapUtil.getXPathLength(bean.getXPath()), true);
if (!bean.getTreeNode().getChildren().isEmpty()) {
XmlMapUtil.updateXPathAndExpression(mapperData, expressionManager, bean, bean.getName(),
XmlMapUtil.getXPathLength(bean.getXpath()), true);
if (!bean.getChildren().isEmpty()) {
refresh();
}
}
@@ -119,7 +121,7 @@ public class XmlTreeSchemaTableView extends AbstractXmlTreeSchemaTableView {
@Override
public Object getValue(Object bean) {
TreeSchemaTableEntry entry = (TreeSchemaTableEntry) bean;
TreeNode entry = (TreeNode) bean;
return entry.getName();
}
@@ -138,13 +140,15 @@ public class XmlTreeSchemaTableView extends AbstractXmlTreeSchemaTableView {
column.setModifiable(true);
CheckboxTableEditorContent checkbox = new CheckboxTableEditorContent();
column.setTableEditorContent(checkbox);
column.setBeanPropertyAccessors(new IBeanPropertyAccessors<TreeSchemaTableEntry, Boolean>() {
column.setBeanPropertyAccessors(new IBeanPropertyAccessors<TreeNode, Boolean>() {
public Boolean get(TreeSchemaTableEntry bean) {
@Override
public Boolean get(TreeNode bean) {
return bean.isKey();
}
public void set(TreeSchemaTableEntry bean, Boolean value) {
@Override
public void set(TreeNode bean, Boolean value) {
bean.setKey(value);
}
});
@@ -157,7 +161,7 @@ public class XmlTreeSchemaTableView extends AbstractXmlTreeSchemaTableView {
column.setModifiable(true);
column.setWeight(20);
TreeSchemaJavaTypeComboValueAdapter comboValueAdapter = new TreeSchemaJavaTypeComboValueAdapter<TreeSchemaTableEntry>(
TreeSchemaJavaTypeComboValueAdapter comboValueAdapter = new TreeSchemaJavaTypeComboValueAdapter<TreeNode>(
JavaTypesManager.getDefaultJavaType(), getNullableAccessor());
ComboBoxCellEditor typeComboEditor = new ComboBoxCellEditor(tableViewerCreator.getTable(),
@@ -183,18 +187,21 @@ public class XmlTreeSchemaTableView extends AbstractXmlTreeSchemaTableView {
column.setTitle("Pattern");
column.setId(ID_COLUMN_PATTERN);
column.setWeight(20);
column.setBeanPropertyAccessors(new IBeanPropertyAccessors<TreeSchemaTableEntry, String>() {
column.setBeanPropertyAccessors(new IBeanPropertyAccessors<TreeNode, String>() {
public String get(TreeSchemaTableEntry bean) {
@Override
public String get(TreeNode bean) {
return bean.getPattern();
}
public void set(TreeSchemaTableEntry bean, String value) {
@Override
public void set(TreeNode bean, String value) {
bean.setPattern(value);
}
});
final ColumnCellModifier columnCellModifier = new ColumnCellModifier(column) {
@Override
public boolean canModify(Object bean) {
boolean typeIsDate = currentBeanHasJavaDateType(bean) && !isReadOnly();
return typeIsDate;
@@ -203,6 +210,7 @@ public class XmlTreeSchemaTableView extends AbstractXmlTreeSchemaTableView {
};
column.setColorProvider(new IColumnColorProvider() {
@Override
public Color getBackgroundColor(Object bean) {
if (!columnCellModifier.canModify(bean)) {
return READONLY_CELL_BG_COLOR;
@@ -210,6 +218,7 @@ public class XmlTreeSchemaTableView extends AbstractXmlTreeSchemaTableView {
return null;
}
@Override
public Color getForegroundColor(Object bean) {
return null;
}
@@ -222,6 +231,7 @@ public class XmlTreeSchemaTableView extends AbstractXmlTreeSchemaTableView {
*
* @see org.talend.commons.ui.swt.tableviewer.behavior.IColumnLabelProvider#getLabel(java.lang.Object)
*/
@Override
public String getLabel(Object bean) {
if (!currentBeanHasJavaDateType(bean)) {
return ""; //$NON-NLS-1$
@@ -243,19 +253,21 @@ public class XmlTreeSchemaTableView extends AbstractXmlTreeSchemaTableView {
}
private boolean currentBeanHasJavaDateType(Object element) {
String talendType = getTalendTypeAccessor().get((TreeSchemaTableEntry) element);
String talendType = getTalendTypeAccessor().get((TreeNode) element);
boolean typeIsDate = JavaTypesManager.DATE.getId().equals(talendType);
return typeIsDate;
}
private IBeanPropertyAccessors<TreeSchemaTableEntry, String> getTalendTypeAccessor() {
return new IBeanPropertyAccessors<TreeSchemaTableEntry, String>() {
private IBeanPropertyAccessors<TreeNode, String> getTalendTypeAccessor() {
return new IBeanPropertyAccessors<TreeNode, String>() {
public String get(TreeSchemaTableEntry bean) {
@Override
public String get(TreeNode bean) {
return bean.getType();
}
public void set(TreeSchemaTableEntry bean, String value) {
@Override
public void set(TreeNode bean, String value) {
bean.setType(value);
if (currentBeanHasJavaDateType(bean)) {
bean.setPattern(new JavaSimpleDateFormatProposalProvider().getProposals(null, 0)[0].getContent());
@@ -264,14 +276,16 @@ public class XmlTreeSchemaTableView extends AbstractXmlTreeSchemaTableView {
};
}
private IBeanPropertyAccessors<TreeSchemaTableEntry, Boolean> getNullableAccessor() {
return new IBeanPropertyAccessors<TreeSchemaTableEntry, Boolean>() {
private IBeanPropertyAccessors<TreeNode, Boolean> getNullableAccessor() {
return new IBeanPropertyAccessors<TreeNode, Boolean>() {
public Boolean get(TreeSchemaTableEntry bean) {
@Override
public Boolean get(TreeNode bean) {
return bean.isNullable();
}
public void set(TreeSchemaTableEntry bean, Boolean value) {
@Override
public void set(TreeNode bean, Boolean value) {
bean.setNullable(value);
}
};

View File

@@ -0,0 +1,108 @@
// ============================================================================
//
// Copyright (C) 2006-2012 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package org.talend.designer.xmlmap.ui.tabs.table.toolbar;
import org.eclipse.gef.commands.Command;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.talend.commons.ui.runtime.image.EImage;
import org.talend.commons.ui.runtime.image.ImageProvider;
import org.talend.commons.ui.swt.advanced.dataeditor.control.ExtendedPushButton;
import org.talend.commons.ui.swt.extended.table.AbstractExtendedControlViewer;
import org.talend.commons.ui.swt.extended.table.AbstractExtendedTableViewer;
import org.talend.designer.xmlmap.ui.tabs.table.TreeSchemaTableEditor;
/**
* created by Administrator on 2013-1-25 Detailled comment
*
*/
public class NextPageButton extends ExtendedPushButton {
/**
* DOC Administrator NextPageButton constructor comment.
*
* @param parent
* @param extendedViewer
* @param tooltip
* @param image
*/
public NextPageButton(Composite parent, AbstractExtendedControlViewer extendedViewer) {
super(parent, extendedViewer, "Next Page", ImageProvider.getImage(EImage.RIGHTX_ICON));
}
/*
* (non-Javadoc)
*
* @see org.talend.commons.ui.swt.advanced.dataeditor.control.ExtendedPushButton#getCommandToExecute()
*/
@Override
protected Command getCommandToExecute() {
return null;
}
@Override
public AbstractExtendedTableViewer getExtendedControlViewer() {
return (AbstractExtendedTableViewer) super.getExtendedControlViewer();
}
/*
* (non-Javadoc)
*
* @see
* org.talend.commons.ui.swt.advanced.dataeditor.control.ExtendedPushButton#handleSelectionEvent(org.eclipse.swt
* .widgets.Event)
*/
@Override
protected void handleSelectionEvent(Event event) {
TreeSchemaTableEditor extendedControlModel = (TreeSchemaTableEditor) getExtendedControlViewer().getExtendedControlModel();
// avoid the selection event ,or it will be slow
getExtendedControlViewer().getTableViewerCreator().getSelectionHelper().setActiveFireSelectionChanged(false);
extendedControlModel.setCurrentPage(extendedControlModel.getCurrentPage() + 1);
getExtendedControlViewer().getTableViewerCreator().getSelectionHelper().setActiveFireSelectionChanged(true);
// only select the first column if change page
getExtendedControlViewer().getTableViewerCreator().getSelectionHelper().setSelection(new int[] { 0 });
}
/*
* (non-Javadoc)
*
* @see org.talend.commons.ui.swt.advanced.dataeditor.control.ExtendedPushButton#getEnabledState()
*/
@Override
public boolean getEnabledState() {
TreeSchemaTableEditor extendedControlModel = (TreeSchemaTableEditor) getExtendedControlViewer().getExtendedControlModel();
if (extendedControlModel == null) {
return false;
}
if (extendedControlModel.getPageCount() < 2) {
getButton().setVisible(false);
} else {
getButton().setVisible(true);
}
if (extendedControlModel != null && extendedControlModel.getCurrentPage() < extendedControlModel.getPageCount()) {
return true;
}
return false;
}
@Override
protected void handleModelChange() {
super.handleModelChange();
TreeSchemaTableEditor extendedControlModel = (TreeSchemaTableEditor) getExtendedControlViewer().getExtendedControlModel();
if (extendedControlModel.getPageCount() < 2) {
getButton().setVisible(false);
}
}
}

View File

@@ -0,0 +1,108 @@
// ============================================================================
//
// Copyright (C) 2006-2012 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package org.talend.designer.xmlmap.ui.tabs.table.toolbar;
import org.eclipse.gef.commands.Command;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.talend.commons.ui.runtime.image.EImage;
import org.talend.commons.ui.runtime.image.ImageProvider;
import org.talend.commons.ui.swt.advanced.dataeditor.control.ExtendedPushButton;
import org.talend.commons.ui.swt.extended.table.AbstractExtendedTableViewer;
import org.talend.designer.xmlmap.ui.tabs.table.TreeSchemaTableEditor;
/**
* created by Administrator on 2013-1-25 Detailled comment
*
*/
public class PreviousPageButton extends ExtendedPushButton {
/**
* DOC Administrator PreviousPageButton constructor comment.
*
* @param parent
* @param extendedViewer
* @param tooltip
* @param image
*/
public PreviousPageButton(Composite parent, AbstractExtendedTableViewer extendedViewer) {
super(parent, extendedViewer, "Previous Page", ImageProvider.getImage(EImage.LEFTX_ICON));
// TODO Auto-generated constructor stub
}
@Override
protected Command getCommandToExecute() {
return null;
}
@Override
public AbstractExtendedTableViewer getExtendedControlViewer() {
return (AbstractExtendedTableViewer) super.getExtendedControlViewer();
}
/*
* (non-Javadoc)
*
* @see
* org.talend.commons.ui.swt.advanced.dataeditor.control.ExtendedPushButton#handleSelectionEvent(org.eclipse.swt
* .widgets.Event)
*/
@Override
protected void handleSelectionEvent(Event event) {
TreeSchemaTableEditor extendedControlModel = (TreeSchemaTableEditor) getExtendedControlViewer().getExtendedControlModel();
// avoid the selection event ,or it will be slow
getExtendedControlViewer().getTableViewerCreator().getSelectionHelper().setActiveFireSelectionChanged(false);
extendedControlModel.setCurrentPage(extendedControlModel.getCurrentPage() - 1);
getExtendedControlViewer().getTableViewerCreator().getSelectionHelper().setActiveFireSelectionChanged(true);
// only select the first column if change page
getExtendedControlViewer().getTableViewerCreator().getSelectionHelper().setSelection(new int[] { 0 });
}
/*
* (non-Javadoc)
*
* @see org.talend.commons.ui.swt.advanced.dataeditor.control.ExtendedPushButton#getEnabledState()
*/
@Override
public boolean getEnabledState() {
TreeSchemaTableEditor extendedControlModel = (TreeSchemaTableEditor) getExtendedControlViewer().getExtendedControlModel();
if (extendedControlModel == null) {
return false;
}
if (extendedControlModel.getPageCount() < 2) {
getButton().setVisible(false);
} else {
getButton().setVisible(true);
}
if (extendedControlModel != null && extendedControlModel.getCurrentPage() > 1) {
return true;
}
return false;
}
/*
* (non-Javadoc)
*
* @see org.talend.commons.ui.swt.advanced.dataeditor.control.ExtendedPushButton#handleModelChange()
*/
@Override
protected void handleModelChange() {
super.handleModelChange();
TreeSchemaTableEditor extendedControlModel = (TreeSchemaTableEditor) getExtendedControlViewer().getExtendedControlModel();
if (extendedControlModel.getPageCount() < 2) {
getButton().setVisible(false);
}
}
}

View File

@@ -0,0 +1,71 @@
// ============================================================================
//
// Copyright (C) 2006-2012 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package org.talend.designer.xmlmap.ui.tabs.table.toolbar;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.swt.widgets.Composite;
import org.talend.commons.ui.swt.advanced.dataeditor.ExtendedToolbarView;
import org.talend.commons.ui.swt.advanced.dataeditor.control.ExtendedPushButton;
import org.talend.commons.ui.swt.extended.table.AbstractExtendedTableViewer;
/**
* created by Administrator on 2013-1-25 Detailled comment
*
*/
public class XmlMapExtendedToolbarView extends ExtendedToolbarView {
private PreviousPageButton previousButton;
private NextPageButton nextButton;
/**
* DOC Administrator XmlMapExtendedToolbarView constructor comment.
*
* @param parent
* @param style
* @param extendedTableViewer
*/
public XmlMapExtendedToolbarView(Composite parent, int style, AbstractExtendedTableViewer extendedTableViewer) {
super(parent, style, extendedTableViewer);
}
/*
* (non-Javadoc)
*
* @see
* org.talend.commons.ui.swt.advanced.dataeditor.ExtendedToolbarView#createComponents(org.eclipse.swt.widgets.Composite
* )
*/
@Override
protected void createComponents(Composite parent) {
previousButton = new PreviousPageButton(parent, getExtendedTableViewer());
nextButton = new NextPageButton(parent, getExtendedTableViewer());
}
/*
* (non-Javadoc)
*
* @see org.talend.commons.ui.swt.advanced.dataeditor.ExtendedToolbarView#getButtons()
*/
@Override
public List<ExtendedPushButton> getButtons() {
List<ExtendedPushButton> buttons = new ArrayList<ExtendedPushButton>();
buttons.add(previousButton);
buttons.add(nextButton);
return buttons;
}
}

View File

@@ -0,0 +1,41 @@
// ============================================================================
//
// Copyright (C) 2006-2012 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package org.talend.designer.xmlmap.ui.tabs.table.utils;
import java.util.ArrayList;
import java.util.List;
import org.talend.designer.xmlmap.model.emf.xmlmap.TreeNode;
/**
* created by Administrator on 2013-1-28 Detailled comment
*
*/
public class SchemaTableUtils {
public static List<TreeNode> getTreeSchemaEnties(TreeNode docNode) {
List<TreeNode> tableModel = new ArrayList<TreeNode>();
for (TreeNode node : docNode.getChildren()) {
// avoid to edit choice and subs in schema editor
if (!node.isChoice() && !node.isSubstitution()) {
tableModel.add(node);
}
if (!node.getChildren().isEmpty()) {
tableModel.addAll(getTreeSchemaEnties(node));
}
}
return tableModel;
}
}