| // $codepro.audit.disable com.instantiations.assist.eclipse.analysis.audit.rule.effectivejava.alwaysOverridetoString.alwaysOverrideToString, com.instantiations.assist.eclipse.analysis.deserializeabilitySecurity, com.instantiations.assist.eclipse.analysis.disallowReturnMutable, com.instantiations.assist.eclipse.analysis.enforceCloneableUsageSecurity, explicitThisUsage |
| /******************************************************************************* |
| * Copyright (c) 2011, 2012 Ericsson AB and others. |
| * |
| * All rights reserved. This program and the accompanying materials are |
| * made available under the terms of the Eclipse Public License v1.0 which |
| * accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Description: |
| * |
| * This class implements the Rule Area element of the UI model |
| * |
| * Contributors: |
| * Sebastien Dubois - Created for Mylyn Review R4E project |
| * |
| *******************************************************************************/ |
| |
| package org.eclipse.mylyn.reviews.r4e.ui.internal.model; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import org.eclipse.jface.window.Window; |
| import org.eclipse.mylyn.reviews.core.model.IReviewComponent; |
| import org.eclipse.mylyn.reviews.r4e.core.model.drules.DRModelFactory; |
| import org.eclipse.mylyn.reviews.r4e.core.model.drules.R4EDesignRuleArea; |
| import org.eclipse.mylyn.reviews.r4e.core.model.drules.R4EDesignRuleViolation; |
| import org.eclipse.mylyn.reviews.r4e.core.model.serial.impl.OutOfSyncException; |
| import org.eclipse.mylyn.reviews.r4e.core.model.serial.impl.ResourceHandlingException; |
| import org.eclipse.mylyn.reviews.r4e.ui.R4EUIPlugin; |
| import org.eclipse.mylyn.reviews.r4e.ui.internal.dialogs.IRuleViolationInputDialog; |
| import org.eclipse.mylyn.reviews.r4e.ui.internal.dialogs.R4EUIDialogFactory; |
| import org.eclipse.mylyn.reviews.r4e.ui.internal.navigator.ReviewNavigatorContentProvider; |
| import org.eclipse.mylyn.reviews.r4e.ui.internal.preferences.PreferenceConstants; |
| import org.eclipse.mylyn.reviews.r4e.ui.internal.properties.general.RuleAreaProperties; |
| import org.eclipse.ui.views.properties.IPropertySource; |
| |
| /** |
| * @author Sebastien Dubois |
| * @version $Revision: 1.0 $ |
| */ |
| public class R4EUIRuleArea extends R4EUIModelElement { |
| |
| // ------------------------------------------------------------------------ |
| // Constants |
| // ------------------------------------------------------------------------ |
| |
| /** |
| * Field RULE_AREA_ICON_FILE. (value is ""icons/obj16/rulearea_obj.gif"") |
| */ |
| public static final String RULE_AREA_ICON_FILE = "icons/obj16/rulearea_obj.gif"; |
| |
| /** |
| * Field NEW_CHILD_ELEMENT_COMMAND_NAME. (value is ""New Rule Violation..."") |
| */ |
| private static final String NEW_CHILD_ELEMENT_COMMAND_NAME = "New Rule Violation..."; |
| |
| /** |
| * Field NEW_CHILD_ELEMENT_COMMAND_TOOLTIP. (value is ""Add a New Rule Area to the Current Rule Set"") |
| */ |
| private static final String NEW_CHILD_ELEMENT_COMMAND_TOOLTIP = "Add a New Rule Violation to the Current Rule Area"; |
| |
| /** |
| * Field REMOVE_ELEMENT_ACTION_NAME. (value is ""Disable Rule Area"") |
| */ |
| private static final String REMOVE_ELEMENT_COMMAND_NAME = "Disable Rule Area"; |
| |
| /** |
| * Field REMOVE_ELEMENT_ACTION_TOOLTIP. (value is ""Disable this Rule Area from its parent Rule Set"") |
| */ |
| private static final String REMOVE_ELEMENT_COMMAND_TOOLTIP = "Disable this Rule Area" + " from its parent Rule Set"; |
| |
| /** |
| * Field RESTORE_ELEMENT_COMMAND_NAME. (value is ""Restore Rule Area"") |
| */ |
| private static final String RESTORE_ELEMENT_COMMAND_NAME = "Restore Rule Area"; |
| |
| /** |
| * Field RESTORE_ELEMENT_ACTION_TOOLTIP. (value is ""Restore this disabled Rule Area"") |
| */ |
| private static final String RESTORE_ELEMENT_COMMAND_TOOLTIP = "Restore this disabled Rule Area"; |
| |
| // ------------------------------------------------------------------------ |
| // Member variables |
| // ------------------------------------------------------------------------ |
| |
| /** |
| * Field fGroup. |
| */ |
| protected R4EDesignRuleArea fArea; |
| |
| /** |
| * Field fViolations. |
| */ |
| private final List<R4EUIRuleViolation> fViolations; |
| |
| // ------------------------------------------------------------------------ |
| // Constructors |
| // ------------------------------------------------------------------------ |
| |
| /** |
| * Constructor for R4EUIRuleArea. |
| * |
| * @param aParent |
| * IR4EUIModelElement |
| * @param aArea |
| * R4EDesignRuleArea |
| */ |
| public R4EUIRuleArea(IR4EUIModelElement aParent, R4EDesignRuleArea aArea) { |
| super(aParent, aArea.getName()); |
| fReadOnly = aParent.isReadOnly(); |
| fArea = aArea; |
| fViolations = new ArrayList<R4EUIRuleViolation>(); |
| } |
| |
| // ------------------------------------------------------------------------ |
| // Methods |
| // ------------------------------------------------------------------------ |
| |
| /** |
| * Method getImageLocation. |
| * |
| * @return String |
| * @see org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIModelElement#getImageLocation() |
| */ |
| public String getImageLocation() { |
| return RULE_AREA_ICON_FILE; |
| } |
| |
| /** |
| * Method getAdapter. |
| * |
| * @param adapter |
| * Class |
| * @return Object |
| * @see org.eclipse.core.runtime.IAdaptable#getAdapter(Class) |
| */ |
| @Override |
| public Object getAdapter(@SuppressWarnings("rawtypes") |
| Class adapter) { |
| if (IR4EUIModelElement.class.equals(adapter)) { |
| return this; |
| } |
| if (IPropertySource.class.equals(adapter)) { |
| return new RuleAreaProperties(this); |
| } |
| return null; |
| } |
| |
| //Attributes |
| |
| /** |
| * Method getArea. |
| * |
| * @return R4EDesignRuleArea |
| */ |
| public R4EDesignRuleArea getArea() { |
| return fArea; |
| } |
| |
| /** |
| * Create a serialization model element object |
| * |
| * @return the new serialization element object |
| */ |
| @Override |
| public List<IReviewComponent> createChildModelDataElement() { |
| //Get Rule Violations from user and set it in model data |
| final List<IReviewComponent> tempViolations = new ArrayList<IReviewComponent>(); |
| |
| final IRuleViolationInputDialog dialog = R4EUIDialogFactory.getInstance().getRuleViolationInputDialog(); |
| final int result = dialog.open(); |
| if (result == Window.OK) { |
| final R4EDesignRuleViolation tempViolation = DRModelFactory.eINSTANCE.createR4EDesignRuleViolation(); |
| tempViolation.setName(dialog.getNameValue()); |
| tempViolations.add(tempViolation); |
| } |
| return tempViolations; |
| } |
| |
| //Hierarchy |
| |
| /** |
| * Method getChildren. |
| * |
| * @return IR4EUIModelElement[] |
| * @see org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIModelElement#getChildren() |
| */ |
| @Override |
| public IR4EUIModelElement[] getChildren() { |
| return fViolations.toArray(new R4EUIRuleViolation[fViolations.size()]); |
| } |
| |
| /** |
| * Method getViolationList. |
| * |
| * @return List<R4EUIRuleViolation> |
| */ |
| public List<R4EUIRuleViolation> getViolationList() { |
| return fViolations; |
| } |
| |
| /** |
| * Method hasChildren. |
| * |
| * @return boolean |
| * @see org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIModelElement#hasChildren() |
| */ |
| @Override |
| public boolean hasChildren() { |
| if (fViolations.size() > 0) { |
| return true; |
| } |
| return false; |
| } |
| |
| /** |
| * Close the model element (i.e. disable it) |
| * |
| * @see org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIModelElement#close() |
| */ |
| @Override |
| public void close() { |
| //Remove all children references |
| R4EUIRuleViolation violation = null; |
| final int violationSize = fViolations.size(); |
| for (int i = 0; i < violationSize; i++) { |
| |
| violation = fViolations.get(i); |
| violation.close(); |
| } |
| fViolations.clear(); |
| fOpen = false; |
| } |
| |
| /** |
| * Method open. |
| */ |
| @Override |
| public void open() { |
| final List<R4EDesignRuleViolation> violations = fArea.getViolations(); |
| if (null != violations) { |
| R4EUIRuleViolation uiViolation = null; |
| final int violationSize = violations.size(); |
| for (int i = 0; i < violationSize; i++) { |
| if (violations.get(i).isEnabled() |
| || R4EUIPlugin.getDefault() |
| .getPreferenceStore() |
| .getBoolean(PreferenceConstants.P_SHOW_DISABLED)) { |
| uiViolation = new R4EUIRuleViolation(this, violations.get(i)); |
| addChildren(uiViolation); |
| if (uiViolation.isEnabled()) { |
| uiViolation.open(); |
| } |
| } |
| } |
| } |
| fOpen = true; |
| } |
| |
| /** |
| * Method setEnabled. |
| * |
| * @param aEnabled |
| * boolean |
| * @throws ResourceHandlingException |
| * @throws OutOfSyncException |
| * @see org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIModelElement#setEnabled(boolean) |
| */ |
| @Override |
| public void setEnabled(boolean aEnabled) throws ResourceHandlingException, OutOfSyncException { |
| final Long bookNum = R4EUIModelController.FResourceUpdater.checkOut(fArea, R4EUIModelController.getReviewer()); |
| fArea.setEnabled(true); |
| R4EUIModelController.FResourceUpdater.checkIn(bookNum); |
| } |
| |
| /** |
| * Method isEnabled. |
| * |
| * @return boolean |
| * @see org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIModelElement#isEnabled() |
| */ |
| @Override |
| public boolean isEnabled() { |
| return fArea.isEnabled(); |
| } |
| |
| /** |
| * Method addChildren. |
| * |
| * @param aChildToAdd |
| * IR4EUIModelElement |
| * @see org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIModelElement#addChildren(IR4EUIModelElement) |
| */ |
| @Override |
| public void addChildren(IR4EUIModelElement aChildToAdd) { |
| fViolations.add((R4EUIRuleViolation) aChildToAdd); |
| } |
| |
| /** |
| * Method createChildren |
| * |
| * @param aModelComponent |
| * - the serialization model component object |
| * @return IR4EUIModelElement |
| * @throws ResourceHandlingException |
| * @throws OutOfSyncException |
| * @see org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIModelElement#createChildren(ReviewNavigatorContentProvider) |
| */ |
| @Override |
| public IR4EUIModelElement createChildren(IReviewComponent aModelComponent) throws ResourceHandlingException, |
| OutOfSyncException { |
| final R4EDesignRuleViolation violation = R4EUIModelController.FModelExt.createR4EDesignRuleViolation(fArea); |
| final Long bookNum = R4EUIModelController.FResourceUpdater.checkOut(violation, |
| R4EUIModelController.getReviewer()); |
| violation.setName(((R4EDesignRuleViolation) aModelComponent).getName()); |
| R4EUIModelController.FResourceUpdater.checkIn(bookNum); |
| final R4EUIRuleViolation addedChild = new R4EUIRuleViolation(this, violation); |
| addChildren(addedChild); |
| return addedChild; |
| } |
| |
| /** |
| * Method removeChildren. |
| * |
| * @param aChildToRemove |
| * IR4EUIModelElement |
| * @param aFileRemove |
| * - also remove from file (hard remove) |
| * @throws OutOfSyncException |
| * @throws ResourceHandlingException |
| * @see org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIModelElement#removeChildren(IR4EUIModelElement) |
| */ |
| @Override |
| public void removeChildren(IR4EUIModelElement aChildToRemove, boolean aFileRemove) |
| throws ResourceHandlingException, OutOfSyncException { |
| |
| final R4EUIRuleViolation removedElement = fViolations.get(fViolations.indexOf(aChildToRemove)); |
| /* TODO uncomment when core model supports hard-removing of elements |
| if (aFileRemove) removedElement.getViolation().remove()); |
| else */ |
| final R4EDesignRuleViolation modelViolation = removedElement.getViolation(); |
| final Long bookNum = R4EUIModelController.FResourceUpdater.checkOut(modelViolation, |
| R4EUIModelController.getReviewer()); |
| modelViolation.setEnabled(false); |
| R4EUIModelController.FResourceUpdater.checkIn(bookNum); |
| |
| //Remove element from UI if the show disabled element option is off |
| if (!(R4EUIPlugin.getDefault().getPreferenceStore().getBoolean(PreferenceConstants.P_SHOW_DISABLED))) { |
| fViolations.remove(removedElement); |
| } |
| } |
| |
| /** |
| * Method removeAllChildren. |
| * |
| * @param aFileRemove |
| * boolean |
| * @throws OutOfSyncException |
| * @throws ResourceHandlingException |
| * @see org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIModelElement#removeAllChildren(boolean) |
| */ |
| @Override |
| public void removeAllChildren(boolean aFileRemove) throws ResourceHandlingException, OutOfSyncException { |
| //Recursively remove all children |
| for (R4EUIRuleViolation area : fViolations) { |
| removeChildren(area, aFileRemove); |
| } |
| } |
| |
| //Listeners |
| |
| /* *//** |
| * Method addListener. |
| * |
| * @param aProvider |
| * ReviewNavigatorContentProvider |
| * @see org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIModelElement#addListener(ReviewNavigatorContentProvider) |
| */ |
| /* |
| @Override |
| public void addListener(ReviewNavigatorContentProvider aProvider) { |
| super.addListener(aProvider); |
| if (null != fViolations) { |
| R4EUIRuleViolation element = null; |
| for (final Iterator<R4EUIRuleViolation> iterator = fViolations.iterator(); iterator.hasNext();) { |
| element = iterator.next(); |
| element.addListener(aProvider); |
| } |
| } |
| } |
| |
| *//** |
| * Method removeListener. |
| * |
| * @param aProvider |
| * ReviewNavigatorContentProvider |
| * @see org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIModelElement#removeListener() |
| */ |
| /* |
| @Override |
| public void removeListener(ReviewNavigatorContentProvider aProvider) { |
| super.removeListener(aProvider); |
| if (null != fViolations) { |
| R4EUIRuleViolation element = null; |
| for (final Iterator<R4EUIRuleViolation> iterator = fViolations.iterator(); iterator.hasNext();) { |
| element = iterator.next(); |
| element.removeListener(aProvider); |
| } |
| } |
| }*/ |
| |
| //Commands |
| |
| /** |
| * Method isAddChildElementCmd. |
| * |
| * @return boolean |
| * @see org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIModelElement#isNewChildElementCmd() |
| */ |
| @Override |
| public boolean isNewChildElementCmd() { |
| if (isEnabled() && !isReadOnly()) { |
| return true; |
| } |
| return false; |
| } |
| |
| /** |
| * Method getAddChildElementCmdName. |
| * |
| * @return String |
| * @see org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIModelElement#getNewChildElementCmdName() |
| */ |
| @Override |
| public String getNewChildElementCmdName() { |
| return NEW_CHILD_ELEMENT_COMMAND_NAME; |
| } |
| |
| /** |
| * Method getAddChildElementCmdTooltip. |
| * |
| * @return String |
| * @see org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIModelElement#getNewChildElementCmdTooltip() |
| */ |
| @Override |
| public String getNewChildElementCmdTooltip() { |
| return NEW_CHILD_ELEMENT_COMMAND_TOOLTIP; |
| } |
| |
| /** |
| * Method isRemoveElementCmd. |
| * |
| * @return boolean |
| * @see org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIModelElement#isRemoveElementCmd() |
| */ |
| @Override |
| public boolean isRemoveElementCmd() { |
| if (isEnabled() && !isReadOnly()) { |
| return true; |
| } |
| return false; |
| } |
| |
| /** |
| * Method getRemoveElementCmdName. |
| * |
| * @return String |
| * @see org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIModelElement#getRemoveElementCmdName() |
| */ |
| @Override |
| public String getRemoveElementCmdName() { |
| return REMOVE_ELEMENT_COMMAND_NAME; |
| } |
| |
| /** |
| * Method getRemoveElementCmdTooltip. |
| * |
| * @return String |
| * @see org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIModelElement#getRemoveElementCmdTooltip() |
| */ |
| @Override |
| public String getRemoveElementCmdTooltip() { |
| return REMOVE_ELEMENT_COMMAND_TOOLTIP; |
| } |
| |
| /** |
| * Method isRestoreElementCmd. |
| * |
| * @return boolean |
| * @see org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIModelElement#iisRestoreElementCmd() |
| */ |
| @Override |
| public boolean isRestoreElementCmd() { |
| if (isEnabled() || isReadOnly()) { |
| return false; |
| } |
| return true; |
| } |
| |
| /** |
| * Method getRestoreElementCmdName. |
| * |
| * @return String |
| * @see org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIModelElement#getRestoreElementCmdName() |
| */ |
| @Override |
| public String getRestoreElementCmdName() { |
| return RESTORE_ELEMENT_COMMAND_NAME; |
| } |
| |
| /** |
| * Method getRestoreElementCmdTooltip. |
| * |
| * @return String |
| * @see org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIModelElement#getRestoreElementCmdTooltip() |
| */ |
| @Override |
| public String getRestoreElementCmdTooltip() { |
| return RESTORE_ELEMENT_COMMAND_TOOLTIP; |
| } |
| } |