Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.m2e.model.edit/src/main/java/org/eclipse/m2e/model/edit/pom/PomModelHandler.java')
-rw-r--r--org.eclipse.m2e.model.edit/src/main/java/org/eclipse/m2e/model/edit/pom/PomModelHandler.java133
1 files changed, 133 insertions, 0 deletions
diff --git a/org.eclipse.m2e.model.edit/src/main/java/org/eclipse/m2e/model/edit/pom/PomModelHandler.java b/org.eclipse.m2e.model.edit/src/main/java/org/eclipse/m2e/model/edit/pom/PomModelHandler.java
new file mode 100644
index 00000000..9318bf5a
--- /dev/null
+++ b/org.eclipse.m2e.model.edit/src/main/java/org/eclipse/m2e/model/edit/pom/PomModelHandler.java
@@ -0,0 +1,133 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2019 Sonatype, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Sonatype, Inc. - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.m2e.model.edit.pom;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.w3c.dom.Element;
+
+import org.eclipse.wst.common.uriresolver.internal.provisional.URIResolver;
+import org.eclipse.wst.sse.core.internal.provisional.IModelLoader;
+import org.eclipse.wst.sse.core.internal.provisional.INodeAdapter;
+import org.eclipse.wst.sse.core.internal.provisional.INodeAdapterFactory;
+import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMDocument;
+import org.eclipse.wst.xml.core.internal.contentmodel.CMElementDeclaration;
+import org.eclipse.wst.xml.core.internal.contentmodel.modelquery.CMDocumentManager;
+import org.eclipse.wst.xml.core.internal.contentmodel.modelqueryimpl.ModelQueryImpl;
+import org.eclipse.wst.xml.core.internal.contentmodel.util.CMDocumentCache;
+import org.eclipse.wst.xml.core.internal.contentmodel.util.NamespaceTable;
+import org.eclipse.wst.xml.core.internal.modelhandler.ModelHandlerForXML;
+import org.eclipse.wst.xml.core.internal.modelhandler.XMLModelLoader;
+import org.eclipse.wst.xml.core.internal.modelquery.ModelQueryAdapterFactoryForXML;
+import org.eclipse.wst.xml.core.internal.modelquery.XMLModelQueryAssociationProvider;
+import org.eclipse.wst.xml.core.internal.ssemodelquery.ModelQueryAdapter;
+import org.eclipse.wst.xml.core.internal.ssemodelquery.ModelQueryAdapterImpl;
+
+
+@SuppressWarnings("restriction")
+public class PomModelHandler extends ModelHandlerForXML {
+
+ private static final String ASSOCIATED_CONTENT_TYPE_ID = "org.eclipse.m2e.pomFile"; //$NON-NLS-1$
+
+ private static final String POM_NAMESPACE = "http://maven.apache.org/POM/4.0.0"; //$NON-NLS-1$
+
+ private static final String POM_XSD = "http://maven.apache.org/xsd/maven-4.0.0.xsd"; //$NON-NLS-1$
+
+ public PomModelHandler() {
+ super();
+ setAssociatedContentTypeId(ASSOCIATED_CONTENT_TYPE_ID);
+ }
+
+ @Override
+ public IModelLoader getModelLoader() {
+ return new PomModelLoader();
+ }
+
+ private static class PomModelLoader extends XMLModelLoader {
+
+ @Override
+ public List<?> getAdapterFactories() {
+ List<Object> result = new ArrayList<>();
+ INodeAdapterFactory factory = new ModelQueryAdapterFactoryForPom();
+ result.add(factory);
+ return result;
+ }
+
+ }
+
+ static class ModelQueryAdapterFactoryForPom extends ModelQueryAdapterFactoryForXML {
+
+ protected ModelQueryAdapterImpl modelQueryAdapterImpl;
+
+ @Override
+ protected INodeAdapter createAdapter(INodeNotifier target) {
+ if(modelQueryAdapterImpl == null) {
+ ModelQueryAdapter mqa = (ModelQueryAdapter) super.createAdapter(target);
+ modelQueryAdapterImpl = new ModelQueryAdapterImpl(mqa.getCMDocumentCache(),
+ new PomModelQueryImpl(mqa.getCMDocumentCache(), mqa.getIdResolver()), mqa.getIdResolver());
+ }
+ return modelQueryAdapterImpl;
+ }
+
+ }
+
+ static class PomModelQueryImpl extends ModelQueryImpl {
+
+ public PomModelQueryImpl(CMDocumentCache cache, URIResolver idResolver) {
+ super(new PomModelQueryAssociationProvider(cache, idResolver));
+ }
+
+ }
+
+ static class PomModelQueryAssociationProvider extends XMLModelQueryAssociationProvider {
+
+ public PomModelQueryAssociationProvider(CMDocumentCache cache, URIResolver idResolver) {
+ super(cache, idResolver);
+ }
+
+ @Override
+ public CMDocument getCMDocument(String publicId, String systemId, String type) {
+ if("".equals(publicId) && "".equals(systemId)) { //$NON-NLS-1$ //$NON-NLS-2$
+ return null;
+ }
+
+ return super.getCMDocument(publicId, systemId, type);
+ }
+
+ @Override
+ public CMElementDeclaration getCMElementDeclaration(Element element) {
+ CMElementDeclaration result = super.getCMElementDeclaration(element);
+
+ if(result == null) {
+ NamespaceTable namespaceTable = new NamespaceTable(element.getOwnerDocument());
+ List list = NamespaceTable.getElementLineage(element);
+ Element rootElement = (Element) list.get(0);
+ namespaceTable.addElement(rootElement);
+
+ documentManager.setPropertyEnabled(CMDocumentManager.PROPERTY_ASYNC_LOAD, false);
+ documentManager.addCMDocumentReference(POM_NAMESPACE, POM_XSD, "XSD"); //$NON-NLS-1$
+ namespaceTable.addNamespaceInfo("", POM_NAMESPACE, ""); //$NON-NLS-1$ //$NON-NLS-2$
+
+ if(namespaceTable.isNamespaceEncountered()) {
+ result = getCMElementDeclaration(element, list, namespaceTable);
+ }
+ }
+
+ return result;
+ }
+ }
+
+}

Back to the top