| //------------------------------------------------------------------------------ |
| // Copyright (c) 2005, 2008 IBM Corporation 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 |
| // |
| // Contributors: |
| // IBM Corporation - initial implementation |
| //------------------------------------------------------------------------------ |
| package org.eclipse.epf.authoring.ui.actions; |
| |
| import org.eclipse.core.resources.IMarker; |
| import org.eclipse.epf.authoring.ui.AuthoringUIPlugin; |
| import org.eclipse.epf.authoring.ui.dialogs.ShowDetailsProblemViewDialog; |
| import org.eclipse.epf.authoring.ui.util.ConfigurationMarkerHelper; |
| import org.eclipse.epf.library.LibraryResources; |
| import org.eclipse.epf.library.LibraryService; |
| import org.eclipse.epf.library.edit.util.TngUtil; |
| import org.eclipse.epf.persistence.util.PersistenceResources; |
| import org.eclipse.epf.persistence.util.UnresolvedProxyMarkerManager; |
| import org.eclipse.epf.uma.MethodElement; |
| import org.eclipse.jface.action.IAction; |
| import org.eclipse.jface.viewers.ISelection; |
| import org.eclipse.jface.viewers.IStructuredSelection; |
| import org.eclipse.ui.IViewActionDelegate; |
| import org.eclipse.ui.IViewPart; |
| import org.eclipse.ui.views.markers.MarkerViewUtil; |
| import org.eclipse.ui.views.markers.internal.ProblemView; |
| |
| /** |
| * Show details action on ProblemView |
| * |
| * @author Weiping Lu |
| * @since 1.5 |
| * |
| */ |
| public class ShowDetailsProblemViewAction implements IViewActionDelegate { |
| |
| private ProblemView targetView; |
| private IMarker selectedMarker; |
| private String markderDetailType; |
| |
| /** |
| * @see org.eclipse.ui.IViewActionDelegate#init(org.eclipse.ui.IViewPart) |
| */ |
| public void init(IViewPart view) { |
| targetView = (ProblemView) view; |
| } |
| |
| /** |
| * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction) |
| */ |
| public void run(IAction action) { |
| if (selectedMarker == null) { |
| return; |
| } |
| if (markderDetailType == null |
| || markderDetailType == UnresolvedProxyMarkerManager.MARKER_DETAIL_TYPE_UNKNOWN) { |
| try { |
| if (! selectedMarker.getType().equals( |
| ConfigurationMarkerHelper.MARKER_ID)) { |
| return; |
| } |
| } catch (Exception e) { |
| return; |
| } |
| } |
| |
| ConfigurationMarkerHelper a; |
| |
| try { |
| |
| String labelString = (String) selectedMarker.getAttribute(IMarker.MESSAGE); |
| String textString = getDialogTextString(selectedMarker, markderDetailType); |
| if (textString.length() == 0) { |
| return; |
| } |
| |
| ShowDetailsProblemViewDialog showDialog = new ShowDetailsProblemViewDialog( |
| targetView.getSite().getShell(), labelString, textString); |
| showDialog.open(); |
| |
| } catch (Exception ex) { |
| AuthoringUIPlugin.getDefault().getLogger().logError(ex); |
| } |
| |
| } |
| |
| private String getDialogTextString(IMarker marker, String type) throws Exception { |
| StringBuffer sb = new StringBuffer(); |
| |
| String typeStr = null; |
| String location = (String) marker.getAttribute(IMarker.LOCATION); |
| String indent = " "; |
| sb.append("Problem cause\n"); |
| |
| //To do: externalize the strings |
| if (type == UnresolvedProxyMarkerManager.MARKER_DETAIL_TYPE_FIND_FILE) { |
| typeStr = "java.io.FileNotFoundException "; |
| |
| sb.append(indent + "An xmi file is referring to another file in the library,\n"); |
| sb.append(indent + "but the referred to file is missing.\n"); |
| sb.append("\nMissing file\n"); |
| sb.append(indent + "The location is shown in the error message description.\n"); |
| sb.append("\nReferring xmi file\n"); |
| sb.append(indent + "Location: " + location + "\n"); |
| sb.append("\nQuick fix\n"); |
| sb.append(indent + "Will remove the missing file reference from referring xmi file.\n"); |
| |
| } else if (type == UnresolvedProxyMarkerManager.MARKER_DETAIL_TYPE_NORMALIZED_URI || |
| type == UnresolvedProxyMarkerManager.MARKER_DETAIL_TYPE_RESOLVING_PROXY) { |
| |
| typeStr = |
| type == UnresolvedProxyMarkerManager.MARKER_DETAIL_TYPE_NORMALIZED_URI ? |
| PersistenceResources.normalizeURIError_msg |
| : PersistenceResources.UnresolvedProxyMarkerManager_couldNotResolveProxy; |
| |
| String ownerGUID = (String) marker.getAttribute(UnresolvedProxyMarkerManager.OWNER_GUID); |
| MethodElement element = LibraryService.getInstance().getCurrentLibraryManager().getMethodElement(ownerGUID); |
| |
| sb.append(indent + "A method element is referring to another method element represented by a object URI,\n"); |
| sb.append(indent + "but the referred to method element cannot be found by resolving the object URI.\n"); |
| |
| if (element != null) { |
| sb.append("\nReferring methor element\n"); |
| sb.append(indent + "type: " + element.getType().getName() + "\n"); |
| sb.append(indent + "name, location: " + TngUtil.getLabelWithPath(element) + "\n"); |
| } |
| |
| sb.append("\nReferred to method element\n"); |
| sb.append(indent + "Object URI: " + marker.getAttribute(UnresolvedProxyMarkerManager.PROXY_URI) + " \n"); |
| |
| sb.append("\nThe file where the referred to element is referred\n"); |
| sb.append(indent + "Location: " + location + "\n"); |
| |
| sb.append("\nQuick fix\n"); |
| sb.append(indent + "Will remove the unresolved object URI from the referring method element.\n"); |
| |
| } else if (marker.getType().equals(ConfigurationMarkerHelper.MARKER_ID)) { |
| String messageId = (String) marker.getAttribute(ConfigurationMarkerHelper.ATTR_MESSAGE_ID); |
| String elementName = (String) marker.getAttribute(MarkerViewUtil.NAME_ATTRIBUTE); |
| String causeName = (String) marker.getAttribute(ConfigurationMarkerHelper.ATTR_CAUSE_ELEMENT_NAME); |
| String elementGuid = (String) marker.getAttribute(ConfigurationMarkerHelper.ATTR_ERROR_ELEMENT_GUID); |
| String causeGuid = (String) marker.getAttribute(ConfigurationMarkerHelper.ATTR_CAUSE_ELEMENT_GUID); |
| String elementType = (String) marker.getAttribute(ConfigurationMarkerHelper.ATTR_ERROR_ELEMENT_TYPE); |
| String causeType = (String) marker.getAttribute(ConfigurationMarkerHelper.ATTR_CAUSE_ELEMENT_TYPE); |
| String causeLocation = (String) marker.getAttribute(ConfigurationMarkerHelper.ATTR_CAUSE_ELEMENT_LOCATION); |
| |
| sb.append(indent + "A method element is referring to another method element.\n"); |
| sb.append(indent + "The referring method element is in the configuration, \n"); |
| sb.append(indent + "but the referred to method element is not.\n"); |
| |
| sb.append("\nReferring method element\n"); |
| sb.append(indent + "type: " + elementType + "\n"); |
| sb.append(indent + "name, location: " + location + "\n"); |
| sb.append(indent + "guid: " + elementGuid + "\n"); |
| |
| sb.append("\nRefered to method element\n"); |
| sb.append(indent + "type: " + causeType + "\n"); |
| sb.append(indent + "name, location: " + causeLocation + "\n"); |
| sb.append(indent + "guid: " + causeGuid + "\n"); |
| |
| String elementRole = null; |
| String causeRole = null; |
| |
| if (messageId == LibraryResources.ElementError_contributor_missing_base) { |
| elementRole = "Variability contributor"; |
| causeRole = "Variability base"; |
| } else if (messageId == LibraryResources.ElementError_extender_missing_base) { |
| elementRole = "Variability extender"; |
| causeRole = "Variability base"; |
| } else if (messageId == LibraryResources.ElementError_replacer_missing_base) { |
| elementRole = "Variability replacer"; |
| causeRole = "Variability base"; |
| } else if (messageId == LibraryResources.ElementError_missing_primary_performer) { |
| elementRole = "Task"; |
| causeRole = "Primary performer"; |
| } else if (messageId == LibraryResources.ElementError_missing_mandatory_input) { |
| elementRole = "Task"; |
| causeRole = "Mandatory input work product"; |
| } else if (messageId == LibraryResources.ElementError_missing_output) { |
| elementRole = "Task"; |
| causeRole = "Output work product"; |
| } else if (messageId == LibraryResources.ElementError_missing_responsible_for_workProduct) { |
| elementRole = "Role"; |
| causeRole = "Respossible for work product"; |
| } else if (messageId == LibraryResources.ElementError_missing_element) { |
| |
| } |
| |
| if (elementRole != null && causeRole != null) { |
| sb.append("\nRelationship\n"); |
| sb.append(indent + "Referring method element: " + elementRole + "\n"); |
| sb.append(indent + "Referred to method element: " + causeRole + "\n"); |
| } |
| |
| sb.append("\nQuick fix\n"); |
| sb.append(indent + "Will add the referred to method element inclduing its containing package to the configuration."); |
| |
| } |
| |
| if (typeStr != null) { |
| int ix = typeStr.length() - 8; |
| typeStr = typeStr.substring(0, ix); |
| sb.append("\nFind Similar Problems\n"); |
| sb.append(indent + "Will find all problems of the type '" + typeStr + "'\n"); |
| sb.append(indent + "and allow quick fix to fix them all at one time."); |
| } |
| |
| return sb.toString(); |
| } |
| |
| private String s(String str) { |
| return str == null ? "" : str;//$NON-NLS-1$ |
| } |
| |
| /** |
| * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction, org.eclipse.jface.viewers.ISelection) |
| */ |
| public void selectionChanged(IAction action, ISelection selection) { |
| markderDetailType = null; |
| selectedMarker = null; |
| if (selection instanceof IStructuredSelection) { |
| IStructuredSelection sel = (IStructuredSelection) selection; |
| boolean b = sel != null && sel.size() == 1; |
| action.setEnabled(b); |
| |
| Object selObj = sel.getFirstElement(); |
| if (selObj instanceof IMarker) { |
| selectedMarker = (IMarker) selObj; |
| try { |
| markderDetailType = (String) selectedMarker.getAttribute(UnresolvedProxyMarkerManager.MARKER_DETAIL_TYPE); |
| } catch (Exception ex) { |
| AuthoringUIPlugin.getDefault().getLogger().logError(ex); |
| } |
| } |
| } |
| } |
| |
| } |