Java tutorial
/** * Copyright (c) 2015 SK holdings Co., Ltd. All rights reserved. * This software is the confidential and proprietary information of SK holdings. * You shall not disclose such confidential information and shall use it only in * accordance with the terms of the license agreement you entered into with SK holdings. * (http://www.eclipse.org/legal/epl-v10.html) */ package nexcore.tool.uml.ui.property.section; import java.util.Iterator; import nexcore.tool.uml.core.message.UMLMessage; import nexcore.tool.uml.core.util.TypeSelectDialogType; import nexcore.tool.uml.manager.UMLHelper; import nexcore.tool.uml.manager.UMLManager; import nexcore.tool.uml.manager.transaction.TransactionalAction; import nexcore.tool.uml.manager.utility.DomainUtil; import nexcore.tool.uml.ui.core.UICoreConstant; import nexcore.tool.uml.ui.core.dialog.TypeSelectDialog; import nexcore.tool.uml.ui.property.UMLTypeCellEditor; import nexcore.tool.uml.ui.property.command.DefaultValueTrasactionAction; import nexcore.tool.uml.ui.property.provider.AttributeSectionContentProvider; import nexcore.tool.uml.ui.property.provider.AttributeSectionLabelProvider; import nexcore.tool.uml.ui.property.type.MultiplicityType; import nexcore.tool.uml.ui.property.type.VisibilityType; import org.eclipse.emf.common.util.EList; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.jface.viewers.ColumnViewerEditor; import org.eclipse.jface.viewers.ColumnViewerEditorActivationEvent; import org.eclipse.jface.viewers.ColumnViewerEditorActivationStrategy; import org.eclipse.jface.viewers.ComboBoxViewerCellEditor; import org.eclipse.jface.viewers.EditingSupport; import org.eclipse.jface.viewers.ICellEditorListener; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.jface.viewers.TableViewerEditor; import org.eclipse.jface.viewers.TextCellEditor; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.TableItem; import org.eclipse.ui.IWorkbenchPartSite; import org.eclipse.uml2.uml.Classifier; import org.eclipse.uml2.uml.DataType; import org.eclipse.uml2.uml.Element; import org.eclipse.uml2.uml.Feature; import org.eclipse.uml2.uml.Interface; import org.eclipse.uml2.uml.LiteralBoolean; import org.eclipse.uml2.uml.LiteralInteger; import org.eclipse.uml2.uml.LiteralString; import org.eclipse.uml2.uml.LiteralUnlimitedNatural; import org.eclipse.uml2.uml.MultiplicityElement; import org.eclipse.uml2.uml.NamedElement; import org.eclipse.uml2.uml.PrimitiveType; import org.eclipse.uml2.uml.Property; import org.eclipse.uml2.uml.Signal; import org.eclipse.uml2.uml.StructuredClassifier; import org.eclipse.uml2.uml.Type; import org.eclipse.uml2.uml.TypedElement; import org.eclipse.uml2.uml.ValueSpecification; import org.eclipse.uml2.uml.VisibilityKind; /** * <ul> * <li> : nexcore.tool.uml.ui.property</li> * <li> : nexcore.tool.uml.ui.property.section</li> * <li> : AttributeSection</li> * <li>? : 2009. 12. 30.</li> * <li>? : ?</li> * </ul> */ public class AttributeSection extends AbstractPropertyCommonSection { /** _IMAGE_COLUMN */ private static final int _IMAGE_COLUMN = 0; /** _NAME_COLUMN */ private static final int _NAME_COLUMN = 1; /** _TYPE_COLUMN */ private static final int _TYPE_COLUMN = 2; /** _DEFAULT_VALUE_COLUMN */ private static final int _DEFAULT_VALUE_COLUMN = 3; /** _VISIBILITY_COLUMN */ private static final int _VISIBILITY_COLUMN = 4; /** _STATIC_COLUMN */ private static final int _STATIC_COLUMN = 5; /** _MULTIPLICITY_COLUMN */ private static final int _MULTIPLICITY_COLUMN = 6; /** COLUMN_NAMES */ private static final String[] COLUMN_NAMES = new String[] { UICoreConstant.PROJECT_CONSTANTS__EMPTY_STRING, UMLMessage.LABEL_NAME, UMLMessage.LABEL_TYPE, UMLMessage.LABEL_DEFAULT_VALUE, UMLMessage.LABEL_VISIBILITY, UMLMessage.LABEL_STATIC, UMLMessage.LABEL_MULTIPLICITY }; /** * COLUMN_WIDTHS */ private static final int[] COLUMN_WIDTHS = new int[] { 60, 100, 100, 80, 80, 80, 60 }; // /** PREFIX */ // private static final String PREFIX = UMLMessage.getMessage(UMLMessage.UML_PROPERTY); /** VISIBILITIES */ private static final String[] VISIBILITIES = { VisibilityType.PUBLIC.toString(), VisibilityType.PRIVATE.toString(), VisibilityType.PROTECTED.toString(), VisibilityType.PACKAGE.toString() }; /** cellEdotor */ private CellEditor cellEditor = null; // /** */ // private FormToolkit toolkit; // // private ScrolledForm form; /** * * * @return Classifier */ private Classifier getData() { return (Classifier) this.getSelectedModel(); } // private CTabFolder container; // private Composite getContainer() { // // TODO Auto-generated method stub // return container; // } /** * partSite */ private IWorkbenchPartSite partSite; /** * getSite * * @return IWorkbenchPartSite */ public IWorkbenchPartSite getSite() { return partSite; } /** * @see nexcore.tool.uml.ui.property.section.AbstractPropertyCommonSection#createMainComposite() */ @Override public void createMainComposite() { gridData = new GridData(GridData.FILL_BOTH); parent.setLayoutData(gridData); sectionComposite = getWidgetFactory().createComposite(parent); sectionLayout = new GridLayout(1, false); sectionComposite.setLayout(sectionLayout); // ToDo // ViewerPane viewerPane = new ViewerPane(getSite().getPage(), // getPart()){ // // @Override // public Viewer createViewer(Composite parent) { // // TODO Auto-generated method stub // return null; // } // // }; // // viewerPane.createControl(getContainer()); // ToolBarManager manager = viewerPane.getToolBarManager(); // // Action addAction = new Action( , // ImageDescriptor.createFromImage(IConstantImageRegistry.eInstance.getSmallIcon(IConstantImageRegistry.ICONNAME_ADD)); // buttonComposite = getWidgetFactory().createComposite(sectionComposite); sectionLayout = new GridLayout(4, true); buttonComposite.setLayout(sectionLayout); gridData = new GridData(); gridData.verticalAlignment = GridData.HORIZONTAL_ALIGN_BEGINNING; buttonComposite.setLayoutData(gridData); Button addButton = getWidgetFactory().createButton(buttonComposite, UMLMessage.getMessage(UMLMessage.LABEL_ADD), SWT.PUSH); // Button addButton = getWidgetFactory().createButton(buttonComposite, // "", SWT.NONE); // addButton.setForeground(ColorConstants.white); // addButton.setImage(IConstantImageRegistry.eInstance.getSmallIcon(IConstantImageRegistry.ICONNAME_ADD)); // addButton.setImage(IConstantImageRegistry.eInstance.getSmallIcon(IConstantImageRegistry.ICONNAME_ADD)); // ImageDescriptor.createFromImage(IConstantImageRegistry.eInstance.getSmallIcon(IConstantImageRegistry.ICONNAME_TEXT)) gridData = new GridData(); gridData.verticalAlignment = GridData.HORIZONTAL_ALIGN_BEGINNING; gridData.horizontalAlignment = GridData.FILL; addButton.setLayoutData(gridData); addButton.addListener(SWT.MouseDown, new Listener() { /** * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event) */ public void handleEvent(Event event) { DomainUtil.run(new TransactionalAction() { /** * @see nexcore.tool.uml.manager.transaction.TransactionalAction#doExecute() */ @Override public void doExecute() { createAttribute(); } }); tableViewer.refresh(); packColumns(); } }); Button deleteButton = getWidgetFactory().createButton(buttonComposite, UMLMessage.getMessage(UMLMessage.LABEL_DELETE), SWT.NONE); gridData = new GridData(); gridData.horizontalAlignment = GridData.FILL; deleteButton.setLayoutData(gridData); deleteButton.addListener(SWT.MouseDown, new Listener() { /** * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event) */ public void handleEvent(Event event) { DomainUtil.run(new TransactionalAction() { /** * @see nexcore.tool.uml.manager.transaction.TransactionalAction#doExecute() */ @Override public void doExecute() { removeAttribute(); } }); tableViewer.refresh(); packColumns(); } }); Button upperButton = getWidgetFactory().createButton(buttonComposite, UMLMessage.getMessage(UMLMessage.LABEL_UPPER), SWT.NONE); gridData = new GridData(); gridData.horizontalAlignment = GridData.FILL; upperButton.setLayoutData(gridData); upperButton.addListener(SWT.MouseDown, new Listener() { /** * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event) */ public void handleEvent(Event event) { DomainUtil.run(new TransactionalAction() { /** * @see nexcore.tool.uml.manager.transaction.TransactionalAction#doExecute() */ @Override public void doExecute() { upperAttribute(); } }); tableViewer.refresh(); packColumns(); } }); Button downButton = getWidgetFactory().createButton(buttonComposite, UMLMessage.getMessage(UMLMessage.LABEL_DOWN), SWT.NONE); gridData = new GridData(); gridData.horizontalAlignment = GridData.FILL; downButton.setLayoutData(gridData); downButton.addListener(SWT.MouseDown, new Listener() { /** * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event) */ public void handleEvent(Event event) { DomainUtil.run(new TransactionalAction() { /** * @see nexcore.tool.uml.manager.transaction.TransactionalAction#doExecute() */ @Override public void doExecute() { downAttribute(); } }); tableViewer.refresh(); packColumns(); } }); tableViewerComposite = getWidgetFactory().createComposite(sectionComposite); sectionLayout = new GridLayout(); tableViewerComposite.setLayout(sectionLayout); gridData = new GridData(GridData.FILL_BOTH); tableViewerComposite.setLayoutData(gridData); tableViewer = new TableViewer(tableViewerComposite, SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI); table = tableViewer.getTable(); gridData = new GridData(GridData.FILL_BOTH); table.setLayoutData(gridData); table.setLinesVisible(true); table.setHeaderVisible(true); tableViewer.setUseHashlookup(true); tableViewer.setColumnProperties(COLUMN_NAMES); tableViewer.setContentProvider(new AttributeSectionContentProvider()); // 2012-09-13 // ?? ? ( ? ?) tableViewer.getTable().addMouseListener(new MouseAdapter() { @Override public void mouseDoubleClick(MouseEvent e) { TableItem item = tableViewer.getTable().getItem(new Point(e.x, e.y)); if (item == null) { DomainUtil.run(new TransactionalAction() { /** * @see nexcore.tool.uml.manager.transaction.TransactionalAction#doExecute() */ @Override public void doExecute() { createAttribute(); } }); tableViewer.refresh(); packColumns(); } } }); ColumnViewerEditorActivationStrategy actSupport = new ColumnViewerEditorActivationStrategy(tableViewer) { /** * @see org.eclipse.jface.viewers.ColumnViewerEditorActivationStrategy#isEditorActivationEvent(org.eclipse.jface.viewers.ColumnViewerEditorActivationEvent) */ protected boolean isEditorActivationEvent(ColumnViewerEditorActivationEvent event) { return event.eventType == ColumnViewerEditorActivationEvent.MOUSE_CLICK_SELECTION; } }; TableViewerEditor.create(tableViewer, actSupport, ColumnViewerEditor.KEYBOARD_ACTIVATION); for (int i = 0; i < COLUMN_NAMES.length; i++) { viewerColumn = new TableViewerColumn(tableViewer, SWT.BORDER_DOT); viewerColumn.getColumn().setText(COLUMN_NAMES[i]); viewerColumn.getColumn().setWidth(COLUMN_WIDTHS[i]); viewerColumn.getColumn().setAlignment(SWT.LEFT); viewerColumn.getColumn().setMoveable(false); viewerColumn.getColumn().setResizable(true); final int columnNumber = i; viewerColumn.setLabelProvider(new AttributeSectionLabelProvider(i)); viewerColumn.setEditingSupport(new EditingSupport(tableViewer) { /** stringBuffer */ StringBuffer stringBuffer; /** * @see org.eclipse.jface.viewers.EditingSupport#canEdit(java.lang.Object) */ protected boolean canEdit(Object element) { if (columnNumber != 0) return true; return false; } /** * @see org.eclipse.jface.viewers.EditingSupport#getCellEditor(java.lang.Object) */ protected CellEditor getCellEditor(Object element) { return getCellEditors(columnNumber, element); } /** * @see org.eclipse.jface.viewers.EditingSupport#getValue(java.lang.Object) */ protected Object getValue(Object element) { switch (columnNumber) { case _NAME_COLUMN: return getTextOfName((Property) element); case _TYPE_COLUMN: return getTextOfType((Property) element); case _DEFAULT_VALUE_COLUMN: return getDefaultValue((Property) element); case _VISIBILITY_COLUMN: return ((Property) element).getVisibility().toString(); case _STATIC_COLUMN: return Boolean.toString(((Property) element).isStatic()); case _MULTIPLICITY_COLUMN: return getMultiplicity((Property) element); default: break; } return null; } private Object getDefaultValue(Property element) { // if(element.getDefault()!=null) return // element.getDefault(); if (element.getDefaultValue() != null) { if (element.getDefaultValue() instanceof LiteralString) { // return // ((LiteralString)element.getDefaultValue()).getValue().toString(); return ((LiteralString) element.getDefaultValue()).getValue(); } else if (element.getDefaultValue() instanceof LiteralInteger) { return String.valueOf(((LiteralInteger) element.getDefaultValue()).getValue()); } else if (element.getDefaultValue() instanceof LiteralUnlimitedNatural) { return String.valueOf(((LiteralUnlimitedNatural) element.getDefaultValue()).getValue()); } else if (element.getDefaultValue() instanceof LiteralBoolean) { return ((LiteralBoolean) element.getDefaultValue()); } else { return UICoreConstant.UMLSECTION_CONSTANTS__DEFAULT_VALUES_NULL; } } else { return UICoreConstant.PROJECT_CONSTANTS__EMPTY_STRING; } } /** * ?? . * * @param property * @return String */ private String getTextOfName(NamedElement element) { if (element.getName() != null) { return element.getName().toString(); } else { return UICoreConstant.PROJECT_CONSTANTS__EMPTY_STRING; } } /** * * * @param element * @return String */ private String getTextOfType(TypedElement element) { if (element.getType() != null) { stringBuffer = new StringBuffer(); stringBuffer.append(element.getType().getName()); stringBuffer.append(UICoreConstant.UMLSECTION_CONSTANTS__PARENTHESIS_LEFT); stringBuffer.append(element.getType().getQualifiedName()); stringBuffer.append(UICoreConstant.UMLSECTION_CONSTANTS__PARENTHESIS_RIGHT); return stringBuffer.toString(); } return UICoreConstant.PROJECT_CONSTANTS__EMPTY_STRING; } /** * ? . * * @param property * @return String */ private String getMultiplicity(MultiplicityElement multiplicityElement) { if (multiplicityElement.getUpperValue() != null && multiplicityElement.getLowerValue() != null) { if (isSingleStar(multiplicityElement)) { return MultiplicityType.SINGLE_STAR.toString(); } else if (isZeroToUnique(multiplicityElement)) { return MultiplicityType.ZERO_TO_UNIQUE.toString(); } else if (isUnique(multiplicityElement)) { return MultiplicityType.UNIQUE.toString(); } else if (isUniqueToSingleStar(multiplicityElement)) { return MultiplicityType.UNIQUE_TO_SINGLE_STAR.toString(); } else { // ? ? return multiplicityElement.getUpperValue().stringValue(); } } else { return MultiplicityType.UNIQUE.toString(); } } /** * ? "*" ? ?. * * @param property * @return boolean */ private boolean isSingleStar(MultiplicityElement multiplicityElement) { if (UICoreConstant.UMLSECTION_CONSTANTS___ZERO .equals(multiplicityElement.getLowerValue().stringValue())) { if (MultiplicityType.SINGLE_STAR.toString() .equals(multiplicityElement.getUpperValue().stringValue())) { return true; } } return false; } /** * ? "1" ? ?. * * @param property * @return boolean */ private boolean isUnique(MultiplicityElement multiplicityElement) { if (UICoreConstant.UMLSECTION_CONSTANTS___UNIQUE .equals(multiplicityElement.getLowerValue().stringValue())) { if (UICoreConstant.UMLSECTION_CONSTANTS___UNIQUE .equals(multiplicityElement.getUpperValue().stringValue())) { return true; } } return false; } /** * ? "1.. *" ? ?. * * @param property * @return boolean */ private boolean isUniqueToSingleStar(MultiplicityElement multiplicityElement) { if (UICoreConstant.UMLSECTION_CONSTANTS___UNIQUE .equals(multiplicityElement.getLowerValue().stringValue())) { if (MultiplicityType.SINGLE_STAR.toString() .equals(multiplicityElement.getUpperValue().stringValue())) { return true; } } return false; } /** * ? "0.. 1" ? ?. * * @param property * @return boolean */ private boolean isZeroToUnique(MultiplicityElement multiplicityElement) { if (UICoreConstant.UMLSECTION_CONSTANTS___ZERO .equals(multiplicityElement.getLowerValue().stringValue())) { if (UICoreConstant.UMLSECTION_CONSTANTS___UNIQUE .equals(multiplicityElement.getUpperValue().stringValue())) { return true; } } return false; } /** * @see org.eclipse.jface.viewers.EditingSupport#setValue(java.lang.Object, * java.lang.Object) */ protected void setValue(Object element, Object value) { if (null == value) { return; } if (value != null) { switch (columnNumber) { case _NAME_COLUMN: setNameToElement((Property) element, (String) value); break; case _TYPE_COLUMN: setTypeToElement((Property) element); break; case _DEFAULT_VALUE_COLUMN: setDefaultValueToElement((Property) element, (String) value); break; case _VISIBILITY_COLUMN: setVisibilityToElement((Property) element, (String) value); break; case _STATIC_COLUMN: setIsStaticToElement((Property) element, (String) value); break; case _MULTIPLICITY_COLUMN: setMultiplicityToElement((Property) element, (String) value); break; default: return; } } tableViewer.refresh(); } /** * * * @param element * void */ private void setTypeToElement(final TypedElement element) { if (((UMLTypeCellEditor) cellEditor).getFirstResult() != null) { DomainUtil.run(new TransactionalAction() { /** * @see nexcore.tool.uml.manager.transaction.TransactionalAction#doExecute() */ @Override public void doExecute() { ((Property) element) .setType(((Type) ((UMLTypeCellEditor) cellEditor).getFirstResult())); ((Property) element).setDefaultValue((ValueSpecification) null); } }); } else { // DomainUtil.run(new TransactionalAction() { // /** // * @see // nexcore.tool.uml.manager.transaction.TransactionalAction#doExecute() // */ // @Override // public void doExecute() { // if( ((Property) element).getType()!=null){ // ((Property) element).setType((Type)null); // ((Property) // element).setDefaultValue((ValueSpecification)null); // } // } // }); } } /** * ?? ? . * * @param value * void */ private void setDefaultValueToElement(Object element, Object value) { DomainUtil.run(new DefaultValueTrasactionAction(element, value)); // defaultValue = ((Property) element).getDefaultValue(); // Property property = (Property) element); // if (defaultValue != null) { // ValueSpecificationOperations.setValue(defaultValue, // (String)value); // // } else { // ((Property) element).setStringDefaultValue(((String) // value)); // } // // if (((String) value).equals(defaultValues[3])) { // // // ((Property) element).setDefaultValue(value); // } else if (((String) value).equals(defaultValues[4])) { // // // // } } /** * ?? ?? . * * @param element * @param value * void */ private void setIsStaticToElement(final Feature element, final String value) { DomainUtil.run(new TransactionalAction() { /** * @see nexcore.tool.uml.manager.transaction.TransactionalAction#doExecute() */ @Override public void doExecute() { if (value.equals(Boolean.toString(true))) { element.setIsStatic(true); } else if (value.equals(Boolean.toString(false))) { element.setIsStatic(false); } } }); } /** * ?? ? . * * @param element * @param value * void */ private void setMultiplicityToElement(final MultiplicityElement element, final String value) { DomainUtil.run(new TransactionalAction() { /** * @see nexcore.tool.uml.manager.transaction.TransactionalAction#doExecute() */ @Override public void doExecute() { if (value.equals(MultiplicityType.SINGLE_STAR.toString())) { // * element.setLower(0); element.setUpper(LiteralUnlimitedNatural.UNLIMITED); } else if (value.equals(MultiplicityType.ZERO_TO_UNIQUE.toString())) { // 0.. 1 element.setLower(0); element.setUpper(1); } else if (value.equals(MultiplicityType.UNIQUE.toString())) { // 1 element.setLower(1); element.setUpper(1); } else if (value.equals(MultiplicityType.UNIQUE_TO_SINGLE_STAR.toString())) { // 1.. * element.setLower(1); element.setUpper(LiteralUnlimitedNatural.UNLIMITED); } else if (value.equals(MultiplicityType.NONE.toString())) { // 1 element.setLower(1); element.setUpper(1); } else { try { final int intValue = new Integer(value).intValue(); if (intValue > 0) { DomainUtil.run(new TransactionalAction() { @Override public void doExecute() { element.setLower(intValue); element.setUpper(intValue); } }); } } catch (Exception e2) { // TODO: handle exception } } } }); } /** * ?? ?? . * * @param element * @param value * void */ private void setNameToElement(final NamedElement element, final String value) { if (UICoreConstant.PROJECT_CONSTANTS__EMPTY_STRING.equals(value)) { // TODO ?? ? ? . } else { DomainUtil.run(new TransactionalAction() { /** * @see nexcore.tool.uml.manager.transaction.TransactionalAction#doExecute() */ @Override public void doExecute() { element.setName(value); } }); } } /** * ?? ? . * * @param element * @param value * void */ private void setVisibilityToElement(final NamedElement element, final String value) { DomainUtil.run(new TransactionalAction() { /** * @see nexcore.tool.uml.manager.transaction.TransactionalAction#doExecute() */ @Override public void doExecute() { if (value.equals(VisibilityType.PUBLIC.toString())) element.setVisibility(VisibilityKind.PUBLIC_LITERAL); else if (value.equals(VisibilityType.PRIVATE.toString())) element.setVisibility(VisibilityKind.PRIVATE_LITERAL); else if (value.equals(VisibilityType.PROTECTED.toString())) element.setVisibility(VisibilityKind.PROTECTED_LITERAL); else if (value.equals(VisibilityType.PACKAGE.toString())) element.setVisibility(VisibilityKind.PACKAGE_LITERAL); } }); } }); } // ? Menu menu = new Menu(table); MenuItem addItem = new MenuItem(menu, SWT.CASCADE); addItem.addSelectionListener(new SelectionAdapter() { /** * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent) */ public void widgetSelected(SelectionEvent e) { DomainUtil.run(new TransactionalAction() { /** * @see nexcore.tool.uml.manager.transaction.TransactionalAction#doExecute() */ @Override public void doExecute() { createAttribute(); } }); tableViewer.refresh(); packColumns(); } }); addItem.setText(UMLMessage.getMessage(UMLMessage.LABEL_ADD_NEW_ATTRIBUTE)); MenuItem deleteItem = new MenuItem(menu, SWT.CASCADE); deleteItem.addSelectionListener(new SelectionAdapter() { /** * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent) */ public void widgetSelected(SelectionEvent e) { DomainUtil.run(new TransactionalAction() { /** * @see nexcore.tool.uml.manager.transaction.TransactionalAction#doExecute() */ @Override public void doExecute() { removeAttribute(); } }); tableViewer.refresh(); packColumns(); } }); deleteItem.setText(UMLMessage.getMessage(UMLMessage.LABEL_DELETE_FROM_MODEL)); MenuItem typeAllItem = new MenuItem(menu, SWT.CASCADE); typeAllItem.addSelectionListener(new SelectionAdapter() { /** * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent) */ public void widgetSelected(SelectionEvent e) { DomainUtil.run(new TransactionalAction() { /** * @see nexcore.tool.uml.manager.transaction.TransactionalAction#doExecute() */ @Override public void doExecute() { final TableItem[] items = tableViewer.getTable().getSelection(); if (items == null || items.length < 1) { return; } Object property = items[0].getData(); if (property instanceof Property) { TypeSelectDialog dialog = new TypeSelectDialog(table.getShell(), TypeSelectDialogType.PROPERTY, (Property) property); int returnCode = dialog.open(); switch (returnCode) { case Window.OK: final Object firstResult = dialog.getFirstResult(); DomainUtil.run(new TransactionalAction() { /** * @see nexcore.tool.uml.manager.transaction.TransactionalAction#doExecute() */ @Override public void doExecute() { for (TableItem item : items) { Object property = item.getData(); if (property instanceof Property) { ((Property) property).setType((Type) firstResult); } } } }); tableViewer.refresh(); return; case Window.CANCEL: case IDialogConstants.FINISH_ID: default: return; } } } }); tableViewer.refresh(); packColumns(); } }); typeAllItem.setText(UMLMessage.LABEL_TYPE_SET); table.setMenu(menu); } /** * ? ? ?? ??? ?? . */ @SuppressWarnings("unchecked") private void removeAttribute() { IStructuredSelection selection = (IStructuredSelection) tableViewer.getSelection(); EList<Property> attributeList = null; if (getData() instanceof StructuredClassifier) { attributeList = ((StructuredClassifier) getData()).getOwnedAttributes(); } else if (getData() instanceof Interface) { attributeList = ((Interface) getData()).getOwnedAttributes(); } else if (getData() instanceof DataType) { attributeList = ((DataType) getData()).getOwnedAttributes(); } else if (getData() instanceof Signal) { attributeList = ((Signal) getData()).getOwnedAttributes(); } for (Iterator<Property> iterator = selection.iterator(); iterator.hasNext();) { attributeList.remove(iterator.next()); } } /** * ?? Attribute ?? */ @SuppressWarnings("unchecked") private void upperAttribute() { IStructuredSelection selection = (IStructuredSelection) tableViewer.getSelection(); EList<Property> attributeList = null; if (getData() instanceof StructuredClassifier) { attributeList = ((StructuredClassifier) getData()).getOwnedAttributes(); } else if (getData() instanceof Interface) { attributeList = ((Interface) getData()).getOwnedAttributes(); } else if (getData() instanceof DataType) { attributeList = ((DataType) getData()).getOwnedAttributes(); } else if (getData() instanceof Signal) { attributeList = ((Signal) getData()).getOwnedAttributes(); } int index = 0; for (Iterator<Property> iterator = selection.iterator(); iterator.hasNext();) { Property next = iterator.next(); index = attributeList.indexOf(next); if (index > 0) attributeList.move(index - 1, next); } } /** * ?? Attribute ?? */ @SuppressWarnings("unchecked") private void downAttribute() { IStructuredSelection selection = (IStructuredSelection) tableViewer.getSelection(); EList<Property> attributeList = null; if (getData() instanceof StructuredClassifier) { attributeList = ((StructuredClassifier) getData()).getOwnedAttributes(); } else if (getData() instanceof Interface) { attributeList = ((Interface) getData()).getOwnedAttributes(); } else if (getData() instanceof DataType) { attributeList = ((DataType) getData()).getOwnedAttributes(); } else if (getData() instanceof Signal) { attributeList = ((Signal) getData()).getOwnedAttributes(); } int index = 0; for (Iterator<Property> iterator = selection.iterator(); iterator.hasNext();) { Property next = iterator.next(); index = attributeList.indexOf(next); if (index < attributeList.size() - 1) attributeList.move(index + 1, next); } } /** * ? ?? ?. */ private void createAttribute() { uniqueName = (UMLManager.getPackagedUniqueName(this.getData(), UMLMessage.getMessage(UMLMessage.UML_PROPERTY))); Property property = UMLHelper.createProperty(); property.setName(uniqueName); if (getData() instanceof StructuredClassifier) { ((StructuredClassifier) getData()).getOwnedAttributes().add(property); } else if (getData() instanceof Interface) { ((Interface) getData()).getOwnedAttributes().add(property); } else if (getData() instanceof DataType) { ((DataType) getData()).getOwnedAttributes().add(property); } else if (getData() instanceof Signal) { ((Signal) getData()).getOwnedAttributes().add(property); } } /** * ? ? ?? ? ? ?. * * @param columnNumber * @return CellEditor ? ?. */ public CellEditor getCellEditors(int columnNumber, final Object element) { switch (columnNumber) { case _IMAGE_COLUMN: return null; case _NAME_COLUMN: cellEditor = new TextCellEditor(tableViewer.getTable()); return cellEditor; case _TYPE_COLUMN: cellEditor = new UMLTypeCellEditor(tableViewer.getTable(), ((Property) element).getType(), (Element) element); ((UMLTypeCellEditor) cellEditor).setUMLModel(this.getData().getModel()); cellEditor.addListener(new ICellEditorListener() { @Override public void editorValueChanged(boolean oldValidState, boolean newValidState) { tableViewer.refresh(element); } @Override public void cancelEditor() { } @Override public void applyEditorValue() { } }); return cellEditor; case _DEFAULT_VALUE_COLUMN: Property property = (Property) element; if (property.getType() == null) { return null; } else if (property.getType() instanceof Element && !(property.getType() instanceof PrimitiveType)) { // cellEditor = new TextCellEditor(tableViewer.getTable()); // return cellEditor; return null; } else if (property.getType().getName() != null && UICoreConstant.PROJECT_CONSTANTS__BOOLEAN .equals(property.getType().getName().toLowerCase())) { createBooleanComboBox(); return cellEditor; } else { return new TextCellEditor(tableViewer.getTable()); } case _VISIBILITY_COLUMN: cellEditor = new ComboBoxViewerCellEditor(tableViewer.getTable(), SWT.READ_ONLY); ((ComboBoxViewerCellEditor) cellEditor).setContenProvider(new IStructuredContentProvider() { /** * @see org.eclipse.jface.viewers.IContentProvider#dispose() */ public void dispose() { } /** * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) */ public Object[] getElements(Object inputElement) { return (Object[]) inputElement; } /** * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, * java.lang.Object, java.lang.Object) */ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } }); ((ComboBoxViewerCellEditor) cellEditor).setInput(VISIBILITIES); return cellEditor; case _STATIC_COLUMN: cellEditor = new ComboBoxViewerCellEditor(tableViewer.getTable(), SWT.READ_ONLY); ((ComboBoxViewerCellEditor) cellEditor).setContenProvider(new IStructuredContentProvider() { /** * @see org.eclipse.jface.viewers.IContentProvider#dispose() */ public void dispose() { } /** * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) */ public Object[] getElements(Object inputElement) { return (Object[]) inputElement; } /** * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, * java.lang.Object, java.lang.Object) */ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } }); ((ComboBoxViewerCellEditor) cellEditor).setInput(UICoreConstant.UMLSECTION_CONSTANTS__IS_BOOLEANS); return cellEditor; case _MULTIPLICITY_COLUMN: cellEditor = new ComboBoxViewerCellEditor(tableViewer.getTable()); ((ComboBoxViewerCellEditor) cellEditor).setContenProvider(new IStructuredContentProvider() { /** * @see org.eclipse.jface.viewers.IContentProvider#dispose() */ public void dispose() { } /** * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) */ public Object[] getElements(Object inputElement) { return (Object[]) inputElement; } /** * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, * java.lang.Object, java.lang.Object) */ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } }); ((ComboBoxViewerCellEditor) cellEditor).setInput(UICoreConstant.UMLSECTION_CONSTANTS__MULTIPLICITIES); return cellEditor; default: return null; } } /** * createBooleanComboBox * void */ private void createBooleanComboBox() { cellEditor = new ComboBoxViewerCellEditor(tableViewer.getTable(), SWT.READ_ONLY); ((ComboBoxViewerCellEditor) cellEditor).setContenProvider(new IStructuredContentProvider() { /** * @see org.eclipse.jface.viewers.IContentProvider#dispose() */ public void dispose() { } /** * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object) */ public Object[] getElements(Object inputElement) { return (Object[]) inputElement; } /** * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, * java.lang.Object, java.lang.Object) */ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } }); ((ComboBoxViewerCellEditor) cellEditor) .setInput(UICoreConstant.UMLSECTION_CONSTANTS__DEFAULT_VALUES_BOOLEAN); } /** * @see nexcore.tool.uml.ui.property.section.AbstractPropertyCommonSection#refreshChildren() */ @Override public void refreshChildren() { if (tableViewer.getContentProvider() != null) { tableViewer.setInput(this.getData()); packColumns(); } } /** * @see nexcore.tool.uml.ui.property.section.AbstractPropertyCommonSection#setListener() */ @Override protected void setListener() { } /** * @see nexcore.tool.uml.ui.property.section.AbstractPropertyCommonSection#unsetListener() */ @Override protected void unsetListener() { } }