1 /******************************************************************************* 2 * Copyright (c) 2000, 2015 IBM Corporation and others. 3 * 4 * This program and the accompanying materials 5 * are made available under the terms of the Eclipse Public License 2.0 6 * which accompanies this distribution, and is available at 7 * https://www.eclipse.org/legal/epl-2.0/ 8 * 9 * SPDX-License-Identifier: EPL-2.0 10 * 11 * Contributors: 12 * IBM Corporation - initial API and implementation 13 *******************************************************************************/ 14 15 package org.eclipse.ui.internal.activities; 16 17 import org.eclipse.core.runtime.IConfigurationElement; 18 import org.eclipse.osgi.util.NLS; 19 import org.eclipse.ui.IMemento; 20 import org.eclipse.ui.internal.WorkbenchPlugin; 21 import org.eclipse.ui.internal.util.ConfigurationElementMemento; 22 23 public final class Persistence { 24 static final String PACKAGE_BASE = "activities"; //$NON-NLS-1$ 25 26 static final String PACKAGE_FULL = "org.eclipse.ui.activities"; //$NON-NLS-1$ 27 28 static final String PACKAGE_PREFIX = "org.eclipse.ui"; //$NON-NLS-1$ 29 30 static final String TAG_ACTIVITY = "activity"; //$NON-NLS-1$ 31 32 static final String TAG_ACTIVITY_REQUIREMENT_BINDING = "activityRequirementBinding"; //$NON-NLS-1$ 33 34 static final String TAG_DEFAULT_ENABLEMENT = "defaultEnablement"; //$NON-NLS-1$ 35 36 static final String TAG_ACTIVITY_ID = "activityId"; //$NON-NLS-1$ 37 38 static final String TAG_ACTIVITY_PATTERN_BINDING = "activityPatternBinding"; //$NON-NLS-1$ 39 40 static final String TAG_CATEGORY = "category"; //$NON-NLS-1$ 41 42 static final String TAG_CATEGORY_ACTIVITY_BINDING = "categoryActivityBinding"; //$NON-NLS-1$ 43 44 static final String TAG_CATEGORY_ID = "categoryId"; //$NON-NLS-1$ 45 46 static final String TAG_REQUIRED_ACTIVITY_ID = "requiredActivityId"; //$NON-NLS-1$ 47 48 static final String TAG_ID = "id"; //$NON-NLS-1$ 49 50 static final String TAG_NAME = "name"; //$NON-NLS-1$ 51 52 static final String TAG_PATTERN = "pattern"; //$NON-NLS-1$ 53 54 static final String TAG_IS_EQUALITY_PATTERN = "isEqualityPattern"; //$NON-NLS-1$ 55 56 static final String TAG_SOURCE_ID = "sourceId"; //$NON-NLS-1$ 57 58 static final String TAG_DESCRIPTION = "description"; //$NON-NLS-1$ 59 60 // Used only in error messages addressed to plug-in developers 61 public static final String ACTIVITY_REQUIREMENT_BINDING_DESC = "Invalid activity requirement binding"; //$NON-NLS-1$ 62 public static final String ACTIVITY_DESC = "Invalid activity"; //$NON-NLS-1$ 63 public static final String ACTIVITY_PATTERN_BINDING_DESC = "Invalid activity pattern binding"; //$NON-NLS-1$ 64 public static final String CATEGORY_ACTIVITY_BINDING_DESC = "Invalid category activity binding"; //$NON-NLS-1$ 65 public static final String CATEGORY_DESC = "Invalid category description"; //$NON-NLS-1$ 66 public static final String ACTIVITY_IMAGE_BINDING_DESC = "Invalid activity image binding"; //$NON-NLS-1$ 67 public static final String ACTIVITY_TRIGGER_DESC = "Invalid trigger point"; //$NON-NLS-1$ 68 public static final String ACTIVITY_TRIGGER_HINT_DESC = "Invalid trigger point hint"; //$NON-NLS-1$ 69 70 // Non-translatable error messages for plug-in developers 71 public static final String shortContextTemplate = " (contributed by ''{0}'')"; //$NON-NLS-1$ ; 72 public static final String fullContextTemplate = " (contributed by ''{0}'', extension ID ''{1}'')"; //$NON-NLS-1$ ; 73 readActivityRequirementBindingDefinition(IMemento memento, String sourceIdOverride)74 static ActivityRequirementBindingDefinition readActivityRequirementBindingDefinition(IMemento memento, 75 String sourceIdOverride) { // , IStatus status) { 76 String childActivityId = memento.getString(TAG_REQUIRED_ACTIVITY_ID); 77 if (childActivityId == null) { 78 log(memento, ACTIVITY_REQUIREMENT_BINDING_DESC, "missing ID of the required activity"); //$NON-NLS-1$ 79 return null; 80 } 81 String parentActivityId = memento.getString(TAG_ACTIVITY_ID); 82 if (parentActivityId == null) { 83 log(memento, ACTIVITY_REQUIREMENT_BINDING_DESC, "missing ID of the activity to bind"); //$NON-NLS-1$ 84 return null; 85 } 86 String sourceId = sourceIdOverride != null ? sourceIdOverride : memento.getString(TAG_SOURCE_ID); 87 return new ActivityRequirementBindingDefinition(childActivityId, parentActivityId, sourceId); 88 } 89 readDefaultEnablement(IMemento memento)90 static String readDefaultEnablement(IMemento memento) { 91 return memento.getString(TAG_ID); 92 } 93 readActivityDefinition(IMemento memento, String sourceIdOverride)94 static ActivityDefinition readActivityDefinition(IMemento memento, String sourceIdOverride) { 95 96 String id = memento.getString(TAG_ID); 97 if (id == null) { 98 log(memento, ACTIVITY_DESC, "missing a unique identifier"); //$NON-NLS-1$ 99 return null; 100 } 101 String name = memento.getString(TAG_NAME); 102 if (name == null) { 103 log(memento, ACTIVITY_DESC, "missing a translatable name"); //$NON-NLS-1$ 104 return null; 105 } 106 String description = memento.getString(TAG_DESCRIPTION); 107 if (description == null) { 108 description = ""; //$NON-NLS-1$ 109 } 110 String sourceId = sourceIdOverride != null ? sourceIdOverride : memento.getString(TAG_SOURCE_ID); 111 return new ActivityDefinition(id, name, sourceId, description); 112 } 113 readActivityPatternBindingDefinition(IMemento memento, String sourceIdOverride)114 static ActivityPatternBindingDefinition readActivityPatternBindingDefinition(IMemento memento, 115 String sourceIdOverride) { 116 117 String activityId = memento.getString(TAG_ACTIVITY_ID); 118 if (activityId == null) { 119 log(memento, ACTIVITY_PATTERN_BINDING_DESC, "missing an ID of the activity to bind"); //$NON-NLS-1$ 120 return null; 121 } 122 String pattern = memento.getString(TAG_PATTERN); 123 if (pattern == null) { 124 log(memento, ACTIVITY_PATTERN_BINDING_DESC, "missing the pattern to be bound"); //$NON-NLS-1$ 125 return null; 126 } 127 String sourceId = sourceIdOverride != null ? sourceIdOverride : memento.getString(TAG_SOURCE_ID); 128 129 final String isEqualityPatternStr = memento.getString(TAG_IS_EQUALITY_PATTERN); 130 final boolean isEqualityPattern = (isEqualityPatternStr != null && isEqualityPatternStr.equals("true")); //$NON-NLS-1$ 131 132 return new ActivityPatternBindingDefinition(activityId, pattern, sourceId, isEqualityPattern); 133 } 134 readCategoryActivityBindingDefinition(IMemento memento, String sourceIdOverride)135 static CategoryActivityBindingDefinition readCategoryActivityBindingDefinition(IMemento memento, 136 String sourceIdOverride) { 137 138 String activityId = memento.getString(TAG_ACTIVITY_ID); 139 if (activityId == null) { 140 log(memento, CATEGORY_ACTIVITY_BINDING_DESC, "missing the ID of the activity to bind"); //$NON-NLS-1$ 141 return null; 142 } 143 String categoryId = memento.getString(TAG_CATEGORY_ID); 144 if (categoryId == null) { 145 log(memento, CATEGORY_ACTIVITY_BINDING_DESC, "missing the ID of the category to bind"); //$NON-NLS-1$ 146 return null; 147 } 148 String sourceId = sourceIdOverride != null ? sourceIdOverride : memento.getString(TAG_SOURCE_ID); 149 return new CategoryActivityBindingDefinition(activityId, categoryId, sourceId); 150 } 151 readCategoryDefinition(IMemento memento, String sourceIdOverride)152 static CategoryDefinition readCategoryDefinition(IMemento memento, String sourceIdOverride) { 153 154 String id = memento.getString(TAG_ID); 155 if (id == null) { 156 log(memento, CATEGORY_DESC, "has no ID"); //$NON-NLS-1$ 157 return null; 158 } 159 String name = memento.getString(TAG_NAME); 160 if (name == null) { 161 log(memento, CATEGORY_DESC, "missing a translatable name"); //$NON-NLS-1$ 162 return null; 163 } 164 String description = memento.getString(TAG_DESCRIPTION); 165 if (description == null) { 166 description = ""; //$NON-NLS-1$ 167 } 168 String sourceId = sourceIdOverride != null ? sourceIdOverride : memento.getString(TAG_SOURCE_ID); 169 return new CategoryDefinition(id, name, sourceId, description); 170 } 171 Persistence()172 private Persistence() { 173 // no-op 174 } 175 log(IMemento memento, String elementName, String msg)176 static public void log(IMemento memento, String elementName, String msg) { 177 if (memento instanceof ConfigurationElementMemento) { 178 ConfigurationElementMemento cMemento = (ConfigurationElementMemento) memento; 179 log(elementName, msg, cMemento.getContributorName(), cMemento.getExtensionID()); 180 } else 181 log(elementName, msg, null, null); 182 } 183 log(IConfigurationElement element, String elementName, String msg)184 static public void log(IConfigurationElement element, String elementName, String msg) { 185 String contributorName = element.getContributor().getName(); 186 String extensionID = element.getDeclaringExtension().getUniqueIdentifier(); 187 log(elementName, msg, contributorName, extensionID); 188 } 189 log(String elementName, String msg, String contributorName, String extensionID)190 static public void log(String elementName, String msg, String contributorName, String extensionID) { 191 String msgInContext = elementName + ": " + msg; //$NON-NLS-1$ ; 192 if (contributorName != null && extensionID != null) 193 msgInContext += NLS.bind(fullContextTemplate, contributorName, extensionID); 194 else if (contributorName != null) 195 msgInContext += NLS.bind(shortContextTemplate, contributorName); 196 WorkbenchPlugin.log(msgInContext); 197 } 198 } 199