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