Commit ccb5eb44 authored by Martti Käärik's avatar Martti Käärik
Browse files

Updated Yang importer: corrected mapping URIs, added HTTP body extensions.

parent 7dad0d64
Loading
Loading
Loading
Loading
Loading
+29 −2
Original line number Original line Diff line number Diff line
package org.etsi.mts.tdl.transform;
package org.etsi.mts.tdl.transform;


import java.util.Collections;
import java.util.HashSet;
import java.util.HashSet;
import java.util.List;
import java.util.List;
import java.util.Optional;
import java.util.Optional;
@@ -22,6 +23,7 @@ import org.etsi.mts.tdl.DataType;
import org.etsi.mts.tdl.Element;
import org.etsi.mts.tdl.Element;
import org.etsi.mts.tdl.ElementImport;
import org.etsi.mts.tdl.ElementImport;
import org.etsi.mts.tdl.EnumDataType;
import org.etsi.mts.tdl.EnumDataType;
import org.etsi.mts.tdl.Extension;
import org.etsi.mts.tdl.NamedElement;
import org.etsi.mts.tdl.NamedElement;
import org.etsi.mts.tdl.Package;
import org.etsi.mts.tdl.Package;
import org.etsi.mts.tdl.PackageableElement;
import org.etsi.mts.tdl.PackageableElement;
@@ -103,6 +105,31 @@ public abstract class AbstractTranslator {
		return collectionType;
		return collectionType;
	}
	}


	protected <T extends DataType> void addSuperType(T type, T superType) {
		if (superType == null)
			return;
		List<Extension> ext = null;
		if (type instanceof SimpleDataType) {
			Extension extension = ((SimpleDataType) type).getExtension();
			if (extension != null)
				ext = Collections.singletonList(extension);
		}
		if (type instanceof StructuredDataType)
			ext = ((StructuredDataType) type).getExtension();
		if (ext == null)
			return;
		for (Extension e : ext) {
			if (e.getExtending().equals(superType))
				return;
		}
		Extension e = tdlFactory.eINSTANCE.createExtension();
		e.setExtending(superType);
		if (type instanceof SimpleDataType)
			((SimpleDataType) type).setExtension(e);
		if (type instanceof StructuredDataType)
			((StructuredDataType) type).getExtension().add(e);
	}



	protected String idStartDigitRegex = "\\A\\d";
	protected String idStartDigitRegex = "\\A\\d";
	protected String idInvalidCharRegex = "\\W";
	protected String idInvalidCharRegex = "\\W";
@@ -253,11 +280,11 @@ public abstract class AbstractTranslator {
		return null;
		return null;
	}
	}
	
	
	protected DataElementMapping addDataElementMapping(String uri, DataType dataType, String tag) {
	protected DataElementMapping addDataElementMapping(String uri, DataType dataType, String tag, DataResourceMapping resourceMapping) {
		DataElementMapping mapping = getTypeFor(dataType.getName()+"_"+tag, tdlPackage.Literals.DATA_ELEMENT_MAPPING);
		DataElementMapping mapping = getTypeFor(dataType.getName()+"_"+tag, tdlPackage.Literals.DATA_ELEMENT_MAPPING);
		mapping.setMappableDataElement(dataType);
		mapping.setMappableDataElement(dataType);
		mapping.setElementURI(uri);
		mapping.setElementURI(uri);
		mapping.setDataResourceMapping(drm);
		mapping.setDataResourceMapping(resourceMapping);
		return mapping;
		return mapping;
	}
	}
	
	
+2 −30
Original line number Original line Diff line number Diff line
package org.etsi.mts.tdl.openapi2tdl.next;
package org.etsi.mts.tdl.openapi2tdl.next;


import java.io.File;
import java.io.File;
import java.util.Collections;
import java.util.HashSet;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Hashtable;
import java.util.List;
import java.util.List;
@@ -22,7 +21,6 @@ import org.etsi.mts.tdl.DataType;
import org.etsi.mts.tdl.DataUse;
import org.etsi.mts.tdl.DataUse;
import org.etsi.mts.tdl.ElementImport;
import org.etsi.mts.tdl.ElementImport;
import org.etsi.mts.tdl.EnumDataType;
import org.etsi.mts.tdl.EnumDataType;
import org.etsi.mts.tdl.Extension;
import org.etsi.mts.tdl.LiteralValueUse;
import org.etsi.mts.tdl.LiteralValueUse;
import org.etsi.mts.tdl.Member;
import org.etsi.mts.tdl.Member;
import org.etsi.mts.tdl.MemberAssignment;
import org.etsi.mts.tdl.MemberAssignment;
@@ -403,12 +401,11 @@ public class OpenAPI2TDLTranslatorNext extends AbstractTranslator {


	private void addMapping(Schema<?> schema, DataType dataType, String sourceMappingTag, String targetMappingTag) {
	private void addMapping(Schema<?> schema, DataType dataType, String sourceMappingTag, String targetMappingTag) {
		DataElementMapping sourceMapping = addDataElementMapping("#/components/schemas/" + schema.getName() + "",
		DataElementMapping sourceMapping = addDataElementMapping("#/components/schemas/" + schema.getName() + "",
				dataType, sourceMappingTag);
				dataType, sourceMappingTag, drm);


		// TODO: make configurable?
		// TODO: make configurable?
		DataElementMapping targetMapping = addDataElementMapping("" + schema.getName() + "", dataType,
		DataElementMapping targetMapping = addDataElementMapping("" + schema.getName() + "", dataType,
				targetMappingTag);
				targetMappingTag, drmTarget);
		targetMapping.setDataResourceMapping(drmTarget);


		if (dataType instanceof StructuredDataType) {
		if (dataType instanceof StructuredDataType) {
			for (Member m : ((StructuredDataType) dataType).getMember()) {
			for (Member m : ((StructuredDataType) dataType).getMember()) {
@@ -478,31 +475,6 @@ public class OpenAPI2TDLTranslatorNext extends AbstractTranslator {
		}
		}
	}
	}


	private <T extends DataType> void addSuperType(T type, T superType) {
		if (superType == null)
			return;
		List<Extension> ext = null;
		if (type instanceof SimpleDataType) {
			Extension extension = ((SimpleDataType) type).getExtension();
			if (extension != null)
				ext = Collections.singletonList(extension);
		}
		if (type instanceof StructuredDataType)
			ext = ((StructuredDataType) type).getExtension();
		if (ext == null)
			return;
		for (Extension e : ext) {
			if (e.getExtending().equals(superType))
				return;
		}
		Extension e = tdlFactory.eINSTANCE.createExtension();
		e.setExtending(superType);
		if (type instanceof SimpleDataType)
			((SimpleDataType) type).setExtension(e);
		if (type instanceof StructuredDataType)
			((StructuredDataType) type).getExtension().add(e);
	}

	private DataType translateObject(Schema<?> schema, String name) {
	private DataType translateObject(Schema<?> schema, String name) {
		StructuredDataType dataType = getStructuredDataTypeFor(name);
		StructuredDataType dataType = getStructuredDataTypeFor(name);
		if (schema.getProperties() == null || !dataType.getMember().isEmpty()) {
		if (schema.getProperties() == null || !dataType.getMember().isEmpty()) {
+2 −1
Original line number Original line Diff line number Diff line
@@ -13,6 +13,7 @@ Require-Bundle: org.etsi.mts.tdl.common,
 org.eclipse.ui;resolution:=optional,
 org.eclipse.ui;resolution:=optional,
 org.eclipse.core.resources;resolution:=optional,
 org.eclipse.core.resources;resolution:=optional,
 org.eclipse.core.runtime;bundle-version="3.26.100";resolution:=optional,
 org.eclipse.core.runtime;bundle-version="3.26.100";resolution:=optional,
 org.etsi.mts.tdl.extras.yang.tools.wrapper
 org.etsi.mts.tdl.extras.yang.tools.wrapper,
 org.eclipse.ui.ide
Automatic-Module-Name: org.etsi.mts.tdl.yang2tdl
Automatic-Module-Name: org.etsi.mts.tdl.yang2tdl
Bundle-ClassPath: .
Bundle-ClassPath: .
+61 −28
Original line number Original line Diff line number Diff line
@@ -5,25 +5,27 @@ import java.util.Hashtable;
import java.util.List;
import java.util.List;
import java.util.Map;
import java.util.Map;


import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ProjectScope;
import org.eclipse.core.resources.ProjectScope;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.preference.BooleanFieldEditor;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.preference.FieldEditor;
import org.eclipse.jface.preference.FieldEditor;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.StringFieldEditor;
import org.eclipse.jface.preference.StringButtonFieldEditor;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IWorkbenchPropertyPage;
import org.eclipse.ui.IWorkbenchPropertyPage;
import org.eclipse.ui.dialogs.ContainerSelectionDialog;
import org.eclipse.ui.preferences.ScopedPreferenceStore;
import org.eclipse.ui.preferences.ScopedPreferenceStore;


public class PropertyPage extends FieldEditorPreferencePage implements IWorkbenchPropertyPage {
public class PropertyPage extends FieldEditorPreferencePage implements IWorkbenchPropertyPage {
	
	
	public static final String PROCEDURE_BASED = "ProcedureBased",
	public static final String YANG_SPEC_LOCATION = "YangFilesLocation";
			GENERATE_JAVA_MAPPING = "GenerateJavaMapping",
			JAVA_GENERATOR = "JavaMappingGenerator",
			JAVA_API_PACKAGE = "JavaApiPackage";


	public static final String PREFERENCE_SCOPE = "org.etsi.mts.tdl.yang2tdl";
	public static final String PREFERENCE_SCOPE = "org.etsi.mts.tdl.yang2tdl";


@@ -33,7 +35,7 @@ public class PropertyPage extends FieldEditorPreferencePage implements IWorkbenc


	protected Map<FieldEditor, String> fields = new Hashtable<FieldEditor, String>();
	protected Map<FieldEditor, String> fields = new Hashtable<FieldEditor, String>();


	private StringFieldEditor javaApiPackage;
//	private StringFieldEditor javaApiPackage;


	public PropertyPage() {
	public PropertyPage() {
		super(GRID);
		super(GRID);
@@ -53,7 +55,7 @@ public class PropertyPage extends FieldEditorPreferencePage implements IWorkbenc
	protected IPreferenceStore doGetPreferenceStore() {
	protected IPreferenceStore doGetPreferenceStore() {
		ProjectScope ps = new ProjectScope((IProject) this.element);
		ProjectScope ps = new ProjectScope((IProject) this.element);
		ScopedPreferenceStore scopedStore = new ScopedPreferenceStore(ps, PREFERENCE_SCOPE);
		ScopedPreferenceStore scopedStore = new ScopedPreferenceStore(ps, PREFERENCE_SCOPE);
		scopedStore.setDefault(JAVA_GENERATOR, "java");
//		scopedStore.setDefault(JAVA_GENERATOR, "java");
		return scopedStore;
		return scopedStore;
	}
	}


@@ -68,11 +70,11 @@ public class PropertyPage extends FieldEditorPreferencePage implements IWorkbenc
	}
	}


	protected void initialize(String name, String value, FieldEditor e) {
	protected void initialize(String name, String value, FieldEditor e) {
		if (name.equals(GENERATE_JAVA_MAPPING)) {
//		if (name.equals(GENERATE_JAVA_MAPPING)) {
			javaApiPackage.setEnabled(
//			javaApiPackage.setEnabled(
					Boolean.valueOf(value),
//					Boolean.valueOf(value),
					getFieldEditorParent());
//					getFieldEditorParent());
		}
//		}
	}
	}


	@Override
	@Override
@@ -109,21 +111,13 @@ public class PropertyPage extends FieldEditorPreferencePage implements IWorkbenc
	protected void createFieldEditors() {
	protected void createFieldEditors() {


		Composite parent = getFieldEditorParent();
		Composite parent = getFieldEditorParent();
		BooleanFieldEditor procBased = new BooleanFieldEditor(PROCEDURE_BASED, "Procedure-based API", parent);
		FieldEditor yangSpecLocation = new ContainerFieldEditor(YANG_SPEC_LOCATION, "Yang files location", parent) {
		addField(procBased);
			@Override
		
			public boolean isValid() {
		parent = getFieldEditorParent();
				return PropertyPage.this.isValid(this) && doCheckState();
		BooleanFieldEditor genJavaMappings = new BooleanFieldEditor(GENERATE_JAVA_MAPPING, "Generate type mappings for Java", parent);
			}
		addField(genJavaMappings);
		};

		addField(yangSpecLocation);
		parent = getFieldEditorParent();
		StringFieldEditor javaGenerator = new StringFieldEditor(JAVA_GENERATOR, "Code generator for mappings", parent);
		javaGenerator.setEnabled(false, parent);
		addField(javaGenerator);

		parent = getFieldEditorParent();
		javaApiPackage = new StringFieldEditor(JAVA_API_PACKAGE, "Java API package", parent);
		addField(javaApiPackage);
		
		
		// TODO
		// TODO
	}
	}
@@ -143,3 +137,42 @@ public class PropertyPage extends FieldEditorPreferencePage implements IWorkbenc
	}
	}


}
}

class ContainerFieldEditor extends StringButtonFieldEditor {

	public ContainerFieldEditor(String name, String label, Composite parent) {
		super(name, label, parent);
	}

	@Override
	protected String changePressed() {

		IContainer root = ResourcesPlugin.getWorkspace().getRoot();
		ContainerSelectionDialog d = new ContainerSelectionDialog(getShell(), root, true, "Select output folder");
		int result = d.open();
		if (result == 0) {
			Object[] dir = d.getResult();
			if (dir.length > 0)
				return dir[0].toString();
		}
		return null;
	}

	@Override
	protected boolean doCheckState() {
		String pathText = getTextControl().getText();
		IPath path = new Path(pathText);
		IContainer root = ResourcesPlugin.getWorkspace().getRoot();
		IFolder f;
		try {
			f = root.getFolder(path);
		} catch (IllegalArgumentException e) {
			setErrorMessage(e.getMessage());
			return false;
		}
		if (!f.exists())
			setErrorMessage(pathText + " does not exist!");
		return f != null && f.exists();
	}

}
 No newline at end of file
+137 −69

File changed.

Preview size limit exceeded, changes collapsed.