Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 135976
Collapse All | Expand All

(-)src/org/eclipse/pde/internal/ui/wizards/extension/NewExtensionPointMainPage.java (+25 lines)
Lines 18-23 Link Here
18
import org.eclipse.pde.core.plugin.IPluginBase;
18
import org.eclipse.pde.core.plugin.IPluginBase;
19
import org.eclipse.pde.core.plugin.IPluginExtensionPoint;
19
import org.eclipse.pde.core.plugin.IPluginExtensionPoint;
20
import org.eclipse.pde.core.plugin.IPluginModelBase;
20
import org.eclipse.pde.core.plugin.IPluginModelBase;
21
import org.eclipse.pde.internal.core.PDECore;
22
import org.eclipse.pde.internal.core.util.IdUtil;
21
import org.eclipse.pde.internal.ui.PDEPlugin;
23
import org.eclipse.pde.internal.ui.PDEPlugin;
22
import org.eclipse.pde.internal.ui.PDEUIMessages;
24
import org.eclipse.pde.internal.ui.PDEUIMessages;
23
import org.eclipse.swt.widgets.Composite;
25
import org.eclipse.swt.widgets.Composite;
Lines 98-101 Link Here
98
		if (fSchemaText!= null && point.getSchema()!=null)
100
		if (fSchemaText!= null && point.getSchema()!=null)
99
			fSchemaText.setText(point.getSchema());
101
			fSchemaText.setText(point.getSchema());
100
	}
102
	}
103
	public String getInvalidIdMessage() {
104
		String schemaVersion = model.getPluginBase().getSchemaVersion();
105
		String id = fIdText.getText();
106
		if (schemaVersion == null || Float.parseFloat(schemaVersion) >= 3.2) {
107
			if (!IdUtil.isValidCompositeID(id))
108
				return PDEUIMessages.NewExtensionPointMainPage_malformedId;
109
			else if (!isValidNamespace(id))
110
				return PDEUIMessages.NewExtensionPointMainPage_namespaceNotFound;
111
			return null;
112
		} 
113
		return IdUtil.isValidSimpleID(id) ? null : PDEUIMessages.BaseExtensionPoint_malformedId;
114
	}
115
	protected final boolean isValidNamespace(String id) {
116
        int index = id.lastIndexOf('.');
117
        if (index > 0) {
118
        	String pluginId = id.substring(0, index);
119
        	return PDECore.getDefault().getModelManager().findEntry(pluginId) != null; 
120
        }
121
        return true;
122
	}
123
	protected boolean isComplete() {
124
		return IdUtil.isValidCompositeID(fIdText.getText());
125
	}
101
}
126
}
(-)src/org/eclipse/pde/internal/ui/wizards/extension/BaseExtensionPointMainPage.java (-13 / +10 lines)
Lines 45-51 Link Here
45
import org.eclipse.pde.internal.core.schema.SchemaRootElement;
45
import org.eclipse.pde.internal.core.schema.SchemaRootElement;
46
import org.eclipse.pde.internal.core.schema.SchemaSimpleType;
46
import org.eclipse.pde.internal.core.schema.SchemaSimpleType;
47
import org.eclipse.pde.internal.core.util.CoreUtility;
47
import org.eclipse.pde.internal.core.util.CoreUtility;
48
import org.eclipse.pde.internal.core.util.IdUtil;
49
import org.eclipse.pde.internal.ui.IHelpContextIds;
48
import org.eclipse.pde.internal.ui.IHelpContextIds;
50
import org.eclipse.pde.internal.ui.IPDEUIConstants;
49
import org.eclipse.pde.internal.ui.IPDEUIConstants;
51
import org.eclipse.pde.internal.ui.PDEPlugin;
50
import org.eclipse.pde.internal.ui.PDEPlugin;
Lines 380-388 Link Here
380
	}
379
	}
381
	public boolean checkFieldsFilled() {	
380
	public boolean checkFieldsFilled() {	
382
		boolean empty = fIdText.getText().length() == 0 || fNameText.getText().length() == 0;
381
		boolean empty = fIdText.getText().length() == 0 || fNameText.getText().length() == 0;
383
        if (!empty) {
384
            empty = !IdUtil.isValidSimpleID(fIdText.getText());
385
        }
386
		if (!empty && isPluginIdNeeded()) {
382
		if (!empty && isPluginIdNeeded()) {
387
			empty = getPluginId().length() == 0 || fSchemaText.getText().length() == 0 ;
383
			empty = getPluginId().length() == 0 || fSchemaText.getText().length() == 0 ;
388
		}
384
		}
Lines 391-414 Link Here
391
		return !empty;
387
		return !empty;
392
	}
388
	}
393
389
394
    public boolean isInvalidValidId() {
395
        return fIdText.getText().length()>0 && !IdUtil.isValidSimpleID(fIdText.getText());
396
    }
397
398
	private void validatePage() {
390
	private void validatePage() {
399
		if (!validateContainer())
391
		if (!validateContainer())
400
			return;
392
			return;
401
		boolean isFilled = checkFieldsFilled();
393
		boolean isFilled = checkFieldsFilled();
402
		String message = null;
394
		String message = getInvalidIdMessage();              
403
        if (isInvalidValidId())
395
        if (message == null && !isFilled) {
404
            message = PDEUIMessages.BaseExtensionPoint_malformedId;                
405
        else if (!isFilled) {
406
            if (isPluginIdNeeded())
396
            if (isPluginIdNeeded())
407
				message = PDEUIMessages.BaseExtensionPoint_missingId;
397
				message = PDEUIMessages.BaseExtensionPoint_missingId;
408
			else
398
			else
409
				message = PDEUIMessages.BaseExtensionPoint_noPlugin_missingId;
399
				message = PDEUIMessages.BaseExtensionPoint_noPlugin_missingId;
410
		}
400
		}
411
		setPageComplete(isFilled);
401
		setPageComplete(isFilled && isComplete());
412
		setMessage(message, IMessageProvider.WARNING);
402
		setMessage(message, IMessageProvider.WARNING);
413
	}
403
	}
414
	private boolean validateContainer() {
404
	private boolean validateContainer() {
Lines 486-489 Link Here
486
			path = path.replaceFirst(workspacePath, ""); //$NON-NLS-1$
476
			path = path.replaceFirst(workspacePath, ""); //$NON-NLS-1$
487
		return path;
477
		return path;
488
	}
478
	}
479
	public String getInvalidIdMessage() {
480
		// No validation done (other than making sure id is not blank)
481
		return null;
482
	}
483
	protected boolean isComplete() {
484
		return true;
485
	}
489
}
486
}
(-)src/org/eclipse/pde/internal/ui/pderesources.properties (-1 / +3 lines)
Lines 1029-1035 Link Here
1029
BaseExtensionPoint_name = Extension Point &Name:
1029
BaseExtensionPoint_name = Extension Point &Name:
1030
BaseExtensionPoint_missingId = Plug-in ID and Extension Point properties must be set
1030
BaseExtensionPoint_missingId = Plug-in ID and Extension Point properties must be set
1031
BaseExtensionPoint_noPlugin_missingId = Extension Point ID and Name must be set.
1031
BaseExtensionPoint_noPlugin_missingId = Extension Point ID and Name must be set.
1032
BaseExtensionPoint_malformedId = Extension Point ID contains invalid characters.  Legal characters are "a-z", "A-Z", "0-9", and "_".
1032
BaseExtensionPoint_malformedId = Extension Point ID is invalid.  Legal characters are "a-z", "A-Z", "0-9", and "_".
1033
BaseWizardSelectionPage_noDesc=No Description available.
1033
BaseWizardSelectionPage_noDesc=No Description available.
1034
BaseExtensionPoint_schema = Extension Point &Schema:
1034
BaseExtensionPoint_schema = Extension Point &Schema:
1035
BaseExtensionPoint_schemaLocation = C&ontainer:
1035
BaseExtensionPoint_schemaLocation = C&ontainer:
Lines 1068-1076 Link Here
1068
NewExtensionWizard_desc = Choose a wizard that will guide you through the new extension creation
1068
NewExtensionWizard_desc = Choose a wizard that will guide you through the new extension creation
1069
NewExtensionWizard_statusMessage = Select a wizard to create new extension
1069
NewExtensionWizard_statusMessage = Select a wizard to create new extension
1070
NewExtensionWizard_PointSelectionPage_title = Extension Point Selection
1070
NewExtensionWizard_PointSelectionPage_title = Extension Point Selection
1071
NewExtensionPointMainPage_namespaceNotFound=Extension Point namespace does not exist in the workspace.
1071
NewExtensionWizard_PointSelectionPage_desc = Select an extension point from those available in the list.
1072
NewExtensionWizard_PointSelectionPage_desc = Select an extension point from those available in the list.
1072
NewExtensionRegistryReader_missingProperty=Cannot create category: id or name is missing
1073
NewExtensionRegistryReader_missingProperty=Cannot create category: id or name is missing
1073
NewExtensionTemplateWizard_generating=Generating content...
1074
NewExtensionTemplateWizard_generating=Generating content...
1075
NewExtensionPointMainPage_malformedId=Extension Point ID is invalid.  Legal characters are "a-z", "A-Z", "0-9", ".", and "_".
1074
NewExtensionWizard_PointSelectionPage_filterCheck = &Show only extension points from the required plug-ins
1076
NewExtensionWizard_PointSelectionPage_filterCheck = &Show only extension points from the required plug-ins
1075
NewExtensionWizard_PointSelectionPage_descButton = &Details
1077
NewExtensionWizard_PointSelectionPage_descButton = &Details
1076
NewExtensionWizard_PointSelectionPage_dependencyTitle = New plug-in dependency
1078
NewExtensionWizard_PointSelectionPage_dependencyTitle = New plug-in dependency
(-)src/org/eclipse/pde/internal/ui/PDEUIMessages.java (+4 lines)
Lines 23-28 Link Here
23
23
24
	public static String MainPreferencePage_updateStale;
24
	public static String MainPreferencePage_updateStale;
25
25
26
	public static String NewExtensionPointMainPage_malformedId;
27
28
	public static String NewExtensionPointMainPage_namespaceNotFound;
29
26
	public static String RevertUnsupportSingletonResolution_desc;
30
	public static String RevertUnsupportSingletonResolution_desc;
27
31
28
	public static String AddLibraryDialog_emptyLibraries;
32
	public static String AddLibraryDialog_emptyLibraries;
(-)src/org/eclipse/pde/internal/core/PDEManager.java (+17 lines)
Lines 16-22 Link Here
16
import org.eclipse.core.resources.IProject;
16
import org.eclipse.core.resources.IProject;
17
import org.eclipse.osgi.service.resolver.BundleDescription;
17
import org.eclipse.osgi.service.resolver.BundleDescription;
18
import org.eclipse.osgi.service.resolver.HostSpecification;
18
import org.eclipse.osgi.service.resolver.HostSpecification;
19
import org.eclipse.pde.core.plugin.IExtensions;
19
import org.eclipse.pde.core.plugin.IFragmentModel;
20
import org.eclipse.pde.core.plugin.IFragmentModel;
21
import org.eclipse.pde.core.plugin.IPluginExtensionPoint;
20
import org.eclipse.pde.core.plugin.IPluginModel;
22
import org.eclipse.pde.core.plugin.IPluginModel;
21
import org.eclipse.pde.core.plugin.IPluginModelBase;
23
import org.eclipse.pde.core.plugin.IPluginModelBase;
22
import org.eclipse.pde.internal.core.ibundle.IBundlePluginModelBase;
24
import org.eclipse.pde.internal.core.ibundle.IBundlePluginModelBase;
Lines 100-104 Link Here
100
		
102
		
101
		return "plugin"; //$NON-NLS-1$
103
		return "plugin"; //$NON-NLS-1$
102
	}
104
	}
105
	
106
	public static IPluginExtensionPoint findExtensionPoint(String fullID) {
107
		IPluginModelBase[] bases = PDECore.getDefault().getModelManager().getAllPlugins();
108
		for (int i = 0; i < bases.length; i++) {
109
			IExtensions extensions = bases[i].getExtensions();
110
			if (extensions == null) 
111
				continue;
112
			IPluginExtensionPoint[] points = extensions.getExtensionPoints();
113
			for (int j = 0; j < points.length; j++) {
114
				if (fullID.equals(points[j].getFullId()))
115
					return points[j];
116
			}
117
		}
118
		return null;
119
	}
103
120
104
}
121
}
(-)src/org/eclipse/pde/internal/core/pderesources.properties (+1 lines)
Lines 78-83 Link Here
78
Builders_Manifest_compositeID = Illegal value ''{0}'' for attribute ''{1}''.  Legal token characters are "a-z", "A-Z", "0-9", "_".  Tokens must be separated by "."
78
Builders_Manifest_compositeID = Illegal value ''{0}'' for attribute ''{1}''.  Legal token characters are "a-z", "A-Z", "0-9", "_".  Tokens must be separated by "."
79
Builders_Manifest_simpleID = Illegal value ''{0}'' for attribute "id".  Legal characters are "a-z", "A-Z", "0-9", and "_"
79
Builders_Manifest_simpleID = Illegal value ''{0}'' for attribute "id".  Legal characters are "a-z", "A-Z", "0-9", and "_"
80
Builders_Manifest_non_ext_attribute = The value for attribute ''{0}'' is not externalized.  The value must begin with %
80
Builders_Manifest_non_ext_attribute = The value for attribute ''{0}'' is not externalized.  The value must begin with %
81
Builders_Manifest_namespaceNotFound=The namespace for extension point ''{0}'' does not currently exist
81
BuildErrorReporter_dirsMustEndSlash={0}: directory entries must end with ''/'' ("{0}/")
82
BuildErrorReporter_dirsMustEndSlash={0}: directory entries must end with ''/'' ("{0}/")
82
Builders_Manifest_dont_translate_att = The value for attribute ''{0}'' should not be translated
83
Builders_Manifest_dont_translate_att = The value for attribute ''{0}'' should not be translated
83
Builders_Manifest_non_ext_element = The content for element ''{0}'' is not externalized.  The content must begin with %
84
Builders_Manifest_non_ext_element = The content for element ''{0}'' is not externalized.  The content must begin with %
(-)src/org/eclipse/pde/internal/core/PDECore.java (-2 / +2 lines)
Lines 223-229 Link Here
223
		String pluginID = fullID.substring(0, lastDot);
223
		String pluginID = fullID.substring(0, lastDot);
224
		IPlugin plugin = findPlugin(pluginID);
224
		IPlugin plugin = findPlugin(pluginID);
225
		if (plugin == null)
225
		if (plugin == null)
226
			return null;
226
			return PDEManager.findExtensionPoint(fullID);
227
		String pointID = fullID.substring(lastDot + 1);
227
		String pointID = fullID.substring(lastDot + 1);
228
		IPluginExtensionPoint[] points = plugin.getExtensionPoints();
228
		IPluginExtensionPoint[] points = plugin.getExtensionPoints();
229
		for (int i = 0; i < points.length; i++) {
229
		for (int i = 0; i < points.length; i++) {
Lines 238-244 Link Here
238
				if (points[j].getId().equals(pointID))
238
				if (points[j].getId().equals(pointID))
239
					return points[j];
239
					return points[j];
240
		}
240
		}
241
		return null;
241
		return PDEManager.findExtensionPoint(fullID);
242
	}
242
	}
243
243
244
	private IFeature findFeature(
244
	private IFeature findFeature(
(-)src/org/eclipse/pde/internal/core/PDECoreMessages.java (+2 lines)
Lines 17-22 Link Here
17
17
18
	public static String BaseExportTask_pdeExport;
18
	public static String BaseExportTask_pdeExport;
19
19
20
	public static String Builders_Manifest_namespaceNotFound;
21
20
	public static String BundleErrorReporter_badFilter;
22
	public static String BundleErrorReporter_badFilter;
21
23
22
	public static String BundleErrorReporter_unresolvedExporter;
24
	public static String BundleErrorReporter_unresolvedExporter;
(-)src/org/eclipse/pde/internal/core/schema/Schema.java (-10 / +3 lines)
Lines 960-981 Link Here
960
	}
960
	}
961
961
962
	public void write(String indent, PrintWriter writer) {
962
	public void write(String indent, PrintWriter writer) {
963
		String pointId = getQualifiedPointId();
964
		int loc = pointId.lastIndexOf('.');
965
		String pluginId = ""; //$NON-NLS-1$
966
		if (loc != -1) {
967
			pluginId = pointId.substring(0, loc);
968
			pointId = pointId.substring(loc + 1);
969
		}
970
		writer.println("<?xml version='1.0' encoding='UTF-8'?>"); //$NON-NLS-1$
963
		writer.println("<?xml version='1.0' encoding='UTF-8'?>"); //$NON-NLS-1$
971
		writer.println("<!-- Schema file written by PDE -->"); //$NON-NLS-1$
964
		writer.println("<!-- Schema file written by PDE -->"); //$NON-NLS-1$
972
		writer.println("<schema targetNamespace=\"" + pluginId + "\">"); //$NON-NLS-1$ //$NON-NLS-2$
965
		writer.println("<schema targetNamespace=\"" + fPluginID + "\">"); //$NON-NLS-1$ //$NON-NLS-2$
973
		String indent2 = INDENT + INDENT;
966
		String indent2 = INDENT + INDENT;
974
		String indent3 = indent2 + INDENT;
967
		String indent3 = indent2 + INDENT;
975
		writer.println(indent + "<annotation>"); //$NON-NLS-1$
968
		writer.println(indent + "<annotation>"); //$NON-NLS-1$
976
		writer.println(indent2 + "<appInfo>"); //$NON-NLS-1$
969
		writer.println(indent2 + "<appInfo>"); //$NON-NLS-1$
977
		writer.print(indent3 + "<meta.schema plugin=\"" + pluginId + "\""); //$NON-NLS-1$ //$NON-NLS-2$
970
		writer.print(indent3 + "<meta.schema plugin=\"" + fPluginID + "\""); //$NON-NLS-1$ //$NON-NLS-2$
978
		writer.print(" id=\"" + pointId + "\""); //$NON-NLS-1$ //$NON-NLS-2$
971
		writer.print(" id=\"" + fPointID + "\""); //$NON-NLS-1$ //$NON-NLS-2$
979
		writer.println(" name=\"" + getName() + "\"/>"); //$NON-NLS-1$ //$NON-NLS-2$
972
		writer.println(" name=\"" + getName() + "\"/>"); //$NON-NLS-1$ //$NON-NLS-2$
980
		writer.println(indent2 + "</appInfo>"); //$NON-NLS-1$
973
		writer.println(indent2 + "</appInfo>"); //$NON-NLS-1$
981
		writer.println(indent2 + "<documentation>"); //$NON-NLS-1$
974
		writer.println(indent2 + "<documentation>"); //$NON-NLS-1$
(-)src/org/eclipse/pde/internal/core/builders/ExtensionsErrorReporter.java (-2 / +14 lines)
Lines 301-308 Link Here
301
            String message = null;
301
            String message = null;
302
            if (schemaVersion < 3.2 && !IdUtil.isValidSimpleID(idAttr.getValue()))
302
            if (schemaVersion < 3.2 && !IdUtil.isValidSimpleID(idAttr.getValue()))
303
            	message = NLS.bind(PDECoreMessages.Builders_Manifest_simpleID, idAttr.getValue());
303
            	message = NLS.bind(PDECoreMessages.Builders_Manifest_simpleID, idAttr.getValue());
304
            else if (schemaVersion >= 3.2 && !IdUtil.isValidCompositeID(idAttr.getValue()))
304
            else if (schemaVersion >= 3.2) {
305
            	message = NLS.bind(PDECoreMessages.Builders_Manifest_compositeID, idAttr.getValue());
305
            	if (!IdUtil.isValidCompositeID(idAttr.getValue())) {
306
            		message = NLS.bind(PDECoreMessages.Builders_Manifest_compositeID, idAttr.getValue());
307
            	} else {
308
            		String id = idAttr.getNodeValue();
309
            		int index = id.lastIndexOf('.');
310
            		if (index > 0) {
311
            			String pluginId = id.substring(0, index);
312
            			if (PDECore.getDefault().getModelManager().findEntry(pluginId) == null) {
313
            				message = NLS.bind(PDECoreMessages.Builders_Manifest_namespaceNotFound, id);
314
            			}
315
            		}
316
            	}
317
            }
306
           
318
           
307
            if (message != null)   
319
            if (message != null)   
308
            	report(message, getLine(element, idAttr.getName()), CompilerFlags.WARNING);
320
            	report(message, getLine(element, idAttr.getName()), CompilerFlags.WARNING);
(-)src/org/eclipse/pde/internal/core/plugin/PluginExtensionPoint.java (-1 / +29 lines)
Lines 13-21 Link Here
13
import java.io.PrintWriter;
13
import java.io.PrintWriter;
14
14
15
import org.eclipse.core.runtime.CoreException;
15
import org.eclipse.core.runtime.CoreException;
16
import org.eclipse.pde.core.plugin.IExtensions;
16
import org.eclipse.pde.core.plugin.IFragment;
17
import org.eclipse.pde.core.plugin.IFragment;
17
import org.eclipse.pde.core.plugin.IPluginBase;
18
import org.eclipse.pde.core.plugin.IPluginBase;
18
import org.eclipse.pde.core.plugin.IPluginExtensionPoint;
19
import org.eclipse.pde.core.plugin.IPluginExtensionPoint;
20
import org.eclipse.pde.core.plugin.IPluginModelBase;
21
import org.eclipse.pde.core.plugin.ISharedExtensionsModel;
22
import org.eclipse.pde.internal.core.ibundle.IBundlePluginModelBase;
19
import org.w3c.dom.Node;
23
import org.w3c.dom.Node;
20
24
21
public class PluginExtensionPoint extends IdentifiablePluginObject
25
public class PluginExtensionPoint extends IdentifiablePluginObject
Lines 30-36 Link Here
30
	}
34
	}
31
35
32
	public String getFullId() {
36
	public String getFullId() {
33
		IPluginBase pluginBase = getPluginModel().getPluginBase();
37
		IPluginModelBase modelBase = getPluginModel();
38
		IPluginBase pluginBase = modelBase.getPluginBase();
39
		String schema = null;
40
		if (modelBase instanceof IBundlePluginModelBase) {
41
			try {
42
				ISharedExtensionsModel exModel = ((IBundlePluginModelBase)modelBase).getExtensionsModel();
43
				IExtensions extensions = exModel.getExtensions();
44
				if (extensions instanceof AbstractExtensions) {
45
					schema = ((AbstractExtensions)extensions).getSchemaVersion();
46
					if (schema == null) {
47
						exModel.load();
48
						schema = ((AbstractExtensions)exModel.getExtensions()).getSchemaVersion();
49
					}
50
				} else {
51
					schema = (extensions instanceof IPluginBase) ? ((IPluginBase)extensions).getSchemaVersion() : null;
52
				}
53
			} catch (CoreException e){
54
			}
55
		} else 
56
			schema = pluginBase.getSchemaVersion();
57
		if ("3.2".equals(schema)) { //$NON-NLS-1$
58
			String pointId = getId();
59
			if (pointId.indexOf('.') > 0)
60
				return pointId;
61
		}
34
		String id = pluginBase.getId();
62
		String id = pluginBase.getId();
35
		if (pluginBase instanceof IFragment)
63
		if (pluginBase instanceof IFragment)
36
			id = ((IFragment) pluginBase).getPluginId();
64
			id = ((IFragment) pluginBase).getPluginId();

Return to bug 135976