From 73de27b2810d68024aa14d221ad7f40e767d421c Mon Sep 17 00:00:00 2001 From: Ed Merks Date: Mon, 11 Jul 2022 12:14:17 +0200 Subject: [PATCH] Improve the aggregator's maven publishing to support resolving package requirements https://github.com/eclipse-cbi/p2repo-aggregator/issues/11 --- .../META-INF/MANIFEST.MF | 6 +- .../icons/full/obj16/dependency.gif | Bin 0 -> 131 bytes .../icons/full/obj16/element.gif | Bin 0 -> 82 bytes .../icons/full/obj16/pom.gif | Bin 0 -> 249 bytes .../analyzer/presentation/AnalyzerEditor.java | 553 ++++++++++-- .../presentation/handlers/AnalyzeHandler.java | 323 +++++-- .../presentation/handlers/BaseHandler.java | 35 +- .../handlers/ClearCacheHandler.java | 22 +- .../icons/full/obj16/MavenDependencyItem.gif | Bin 0 -> 129 bytes .../full/obj16/MavenDependencyMapping.gif | Bin 0 -> 370 bytes .../plugin.properties | 15 + .../RequiredCapabilityItemProvider.java | 10 + .../provider/AggregationItemProvider.java | 31 +- .../AggregatorItemProviderAdapterFactory.java | 54 ++ .../provider/ContributionItemProvider.java | 69 +- .../MavenDependencyItemItemProvider.java | 214 +++++ .../MavenDependencyMappingItemProvider.java | 306 +++++++ .../provider/MavenMappingItemProvider.java | 25 +- .../engine/maven/InstallableUnitMapping.java | 426 ++++++--- .../aggregator/engine/maven/MavenManager.java | 25 +- .../cbi/p2repo/aggregator/engine/Builder.java | 60 +- .../aggregator/engine/MirrorGenerator.java | 4 +- .../model/Aggregator.ecore | 56 +- .../model/Aggregator.genmodel | 24 + .../cbi/p2repo/aggregator/Aggregation.java | 17 + .../p2repo/aggregator/AggregatorFactory.java | 20 + .../p2repo/aggregator/AggregatorPackage.java | 572 +++++++++++- .../cbi/p2repo/aggregator/Contribution.java | 28 + .../aggregator/MavenDependencyItem.java | 125 +++ .../aggregator/MavenDependencyMapping.java | 205 +++++ .../cbi/p2repo/aggregator/MavenMapping.java | 31 +- .../aggregator/impl/AggregationImpl.java | 41 + .../impl/AggregatorFactoryImpl.java | 30 + .../impl/AggregatorPackageImpl.java | 281 +++++- .../aggregator/impl/ContributionImpl.java | 56 ++ .../impl/MavenDependencyItemImpl.java | 368 ++++++++ .../impl/MavenDependencyMappingImpl.java | 848 ++++++++++++++++++ .../aggregator/impl/MavenMappingImpl.java | 77 +- .../util/AggregatorAdapterFactory.java | 42 + .../util/AggregatorResourceFactoryImpl.java | 21 +- .../aggregator/util/AggregatorSwitch.java | 52 ++ .../p2repo/aggregator/util/GeneralUtils.java | 66 +- .../aggregator/util/InstallableUnitUtils.java | 60 +- .../cbi/p2repo/p2/maven/util/VersionUtil.java | 5 + .../p2/impl/RequiredCapabilityImpl.java | 4 +- .../org/eclipse/cbi/p2repo/util/IOUtils.java | 40 +- .../launchers/CBI Aggregator.launch | 271 +++--- ...lipse.cbi.p2repo.aggregator.prereqs.target | 3 +- 48 files changed, 5035 insertions(+), 486 deletions(-) create mode 100644 plugins/org.eclipse.cbi.p2repo.aggregator.analyzer.editor/icons/full/obj16/dependency.gif create mode 100644 plugins/org.eclipse.cbi.p2repo.aggregator.analyzer.editor/icons/full/obj16/element.gif create mode 100644 plugins/org.eclipse.cbi.p2repo.aggregator.analyzer.editor/icons/full/obj16/pom.gif create mode 100644 plugins/org.eclipse.cbi.p2repo.aggregator.edit/icons/full/obj16/MavenDependencyItem.gif create mode 100644 plugins/org.eclipse.cbi.p2repo.aggregator.edit/icons/full/obj16/MavenDependencyMapping.gif create mode 100644 plugins/org.eclipse.cbi.p2repo.aggregator.edit/src/org/eclipse/cbi/p2repo/aggregator/provider/MavenDependencyItemItemProvider.java create mode 100644 plugins/org.eclipse.cbi.p2repo.aggregator.edit/src/org/eclipse/cbi/p2repo/aggregator/provider/MavenDependencyMappingItemProvider.java create mode 100644 plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/MavenDependencyItem.java create mode 100644 plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/MavenDependencyMapping.java create mode 100644 plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/impl/MavenDependencyItemImpl.java create mode 100644 plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/impl/MavenDependencyMappingImpl.java diff --git a/plugins/org.eclipse.cbi.p2repo.aggregator.analyzer.editor/META-INF/MANIFEST.MF b/plugins/org.eclipse.cbi.p2repo.aggregator.analyzer.editor/META-INF/MANIFEST.MF index 6f0270d0a..6bfd23689 100644 --- a/plugins/org.eclipse.cbi.p2repo.aggregator.analyzer.editor/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.cbi.p2repo.aggregator.analyzer.editor/META-INF/MANIFEST.MF @@ -19,10 +19,14 @@ Require-Bundle: org.apache.batik.awt.util, org.eclipse.jdt.ui, org.eclipse.jface.text, org.eclipse.gmf.runtime.draw2d.ui.render.awt, - org.eclipse.cbi.p2repo.aggregator.edit;visibility:=reexport, org.eclipse.cbi.p2repo.aggregator.analyzer.edit;visibility:=reexport, + org.eclipse.cbi.p2repo.aggregator.edit;visibility:=reexport, + org.eclipse.cbi.p2repo.aggregator.engine.maven, org.eclipse.cbi.p2repo.p2.edit;visibility:=reexport, + org.eclipse.cbi.p2repo.p2.maven, org.eclipse.cbi.p2repo.aggregator.engine, + org.eclipse.cbi.p2repo.util, + org.eclipse.m2e.maven.runtime, org.eclipse.ui, org.eclipse.ui.ide;visibility:=reexport, org.eclipse.zest.core, diff --git a/plugins/org.eclipse.cbi.p2repo.aggregator.analyzer.editor/icons/full/obj16/dependency.gif b/plugins/org.eclipse.cbi.p2repo.aggregator.analyzer.editor/icons/full/obj16/dependency.gif new file mode 100644 index 0000000000000000000000000000000000000000..1d9c7e3c63bbbe304c241849a2910ad7af6bd8c2 GIT binary patch literal 131 zcmZ?wbhEHb6krfw*v!EY)4lt_tFOP`9@=*9+3nl6_w_`TEk1u{X4?P%{~53W#h)yU z3=A9$Iv`1q84N520w+CJuT^{Q?fZk_IapIfC|d&-RKiX!Tv0;Sy#UdQ-vpVOi~ Q>0({`gZ%9|N=gjY03=5({r~^~ literal 0 HcmV?d00001 diff --git a/plugins/org.eclipse.cbi.p2repo.aggregator.analyzer.editor/icons/full/obj16/element.gif b/plugins/org.eclipse.cbi.p2repo.aggregator.analyzer.editor/icons/full/obj16/element.gif new file mode 100644 index 0000000000000000000000000000000000000000..5e7fb33399d8a2aefbdb288b65aa988365decfb3 GIT binary patch literal 82 zcmZ?wbhEHb6krfwn8?6z=<*|h(5{0o{sV#HPZmZ724)5w1|R^*GcYO7>0f#JEx#~_ iCWEP~kl53sv2F_t?|jr;=$<#%MKRyyx>+y-gEatR02?y^ literal 0 HcmV?d00001 diff --git a/plugins/org.eclipse.cbi.p2repo.aggregator.analyzer.editor/icons/full/obj16/pom.gif b/plugins/org.eclipse.cbi.p2repo.aggregator.analyzer.editor/icons/full/obj16/pom.gif new file mode 100644 index 0000000000000000000000000000000000000000..aa4c32cd6b9d35a916f29250403249988fa4b12a GIT binary patch literal 249 zcmVUQJfed&s)jS)==b94 z_;;MXz0cs(vT5h;_{iAn-{|<&;qf(Wov_8;PJXJ_;_lqRg7x?NuZS_}@cH)m`}g_$ zvWhVI`ur$jmjD0%A^8LW0018VEC2ui01yBW000Gc;3tk`Npfh4nj+S{aKo_(3|q2^ zY analyzer; /** @@ -1050,6 +1078,20 @@ public void mouseDoubleClick(MouseEvent event) { }); } + protected Analysis getAnalysis() { + EList resources = editingDomain.getResourceSet().getResources(); + if (!resources.isEmpty()) { + return getAnalysis(resources.get(0)); + } + return null; + } + + protected Analysis getAnalysis(Resource resource) { + Analysis analysis = (Analysis) EcoreUtil.getObjectByType(resource.getContents(), + AnalyzerPackage.Literals.ANALYSIS); + return analysis; + } + /** * This is the method called to load a resource into the editing domain's resource set based on the editor's input. * @@ -1147,9 +1189,7 @@ protected void handleSelection(Object element) { }); ResourceSet resourceSet = editingDomain.getResourceSet(); - Resource resource = resourceSet.getResources().get(0); - Analysis analysis = (Analysis) EcoreUtil.getObjectByType(resource.getContents(), - AnalyzerPackage.Literals.ANALYSIS); + Analysis analysis = getAnalysis(); analyzer = new AtomicReference<>(); if (analysis != null) { analyzer.set(new AnalyzeHandler.Analyzer(analysis)); @@ -1163,6 +1203,7 @@ protected void handleSelection(Object element) { dependentIUsViewer = createDependentIUsViewer(); requiredIUsViewer = createRequiredIUsViewer(); namespaceViewer = createNamespaceViewer(); + mavenViewer = createViewerWithBreadcrumb(composite -> createMavenViewer(composite)); repositoryViewer = createRepositoryReviewer(); graphViewer = createGraphViewer(); @@ -1185,8 +1226,7 @@ public void notifyChanged(Notification notification) { setActivePage(analysisViewer); } - Analysis analysis = (Analysis) EcoreUtil.getObjectByType(resource.getContents(), - AnalyzerPackage.Literals.ANALYSIS); + Analysis analysis = getAnalysis(resource); if (analysis != null) { dependentIUsViewer .setInput(new ItemProvider(Collections.singleton(createIUDependents(analysis)))); @@ -1198,6 +1238,7 @@ public void notifyChanged(Notification notification) { .getObjectByType(resource.getContents(), P2viewPackage.Literals.METADATA_REPOSITORY_STRUCTURED_VIEW); repositoryViewer.setInput(metadataRepositoryStructuredView.getInstallableUnitList()); + mavenViewer.setInput(metadataRepositoryStructuredView.getMetadataRepository()); } } setReadOnly(false); @@ -1207,7 +1248,7 @@ public void notifyChanged(Notification notification) { showTabs(); selectionViewer.setAutoExpandLevel(2); - selectionViewer.setInput(resource); + selectionViewer.setInput(analysis.eResource()); addPageChangedListener(event -> { Viewer viewer = viewers.get(event.getSelectedPage()); @@ -1243,25 +1284,33 @@ protected StructuredViewer createBreadcrumbViewer(Composite parent, StructuredVi parent.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_DARK_GRAY)); BiConsumer viewerConfigurator = (viewer, input) -> { - AdapterFactory adapterFactory = getAdapterFactory(); - AdapterFactoryContentProvider contentProvider = new AdapterFactoryContentProvider(adapterFactory) { + + ITreeContentProvider contentProvider = (ITreeContentProvider) treeViewer.getContentProvider(); + ITreeContentProvider delegate = new ITreeContentProvider() { @Override - public void notifyChanged(Notification notification) { - // Don't respond to any notification. - // An avalanche of these are produced while creating the elements. + public boolean hasChildren(Object element) { + return contentProvider.hasChildren(element); } @Override - public Object getParent(Object object) { - if (object == treeViewer.getInput()) { + public Object getParent(Object element) { + if (element == treeViewer.getInput()) { return null; } - Object result = super.getParent(object); - return result; + return contentProvider.getParent(element); } + @Override + public Object[] getElements(Object inputElement) { + return contentProvider.getElements(inputElement); + } + + @Override + public Object[] getChildren(Object parentElement) { + return contentProvider.getElements(parentElement); + } }; - viewer.setContentProvider(contentProvider); + viewer.setContentProvider(delegate); class MyLabelProvider extends AdapterFactoryLabelProvider implements IStyledLabelProvider { public MyLabelProvider(AdapterFactory adapterFactory) { @@ -1269,7 +1318,10 @@ public MyLabelProvider(AdapterFactory adapterFactory) { } } - MyLabelProvider styledLabelProvider = new MyLabelProvider(adapterFactory); + IBaseLabelProvider viewerLabelProvider = treeViewer.getLabelProvider(); + IStyledLabelProvider styledLabelProvider = viewerLabelProvider instanceof DelegatingStyledCellLabelProvider + ? ((DelegatingStyledCellLabelProvider) viewerLabelProvider).getStyledStringProvider() + : new MyLabelProvider(adapterFactory); CellLabelProvider labelProvider = new DelegatingStyledCellLabelProvider(styledLabelProvider); viewer.setLabelProvider(labelProvider); @@ -1431,7 +1483,9 @@ protected TreeViewer createStrictRequirementsViewer(Composite parent) { .add(selection -> new ShowInAction("Strict Requirement IUs", selection, strictRequirementsViewer) { @Override protected void handleSelection(Object element) { - if (element instanceof ContributionAnalysis || element instanceof InstallableUnitAnalysis + if (element instanceof IInstallableUnit) { + setTarget(element); + } else if (element instanceof ContributionAnalysis || element instanceof InstallableUnitAnalysis || element instanceof CapabilityAnalysis || element instanceof CapabilityResolution) { setTarget(element); } else if (element instanceof IUPresentation) { @@ -1484,7 +1538,8 @@ protected TreeViewer createAnalysisViewer(Composite parent) { showInActionFactories.add(selection -> new ShowInAction("Contributed IUs", selection, analysisViewer) { @Override protected void handleSelection(Object element) { - if (element instanceof ContributionAnalysis || element instanceof InstallableUnitAnalysis + if (element instanceof IInstallableUnit || element instanceof ContributionAnalysis + || element instanceof InstallableUnitAnalysis || element instanceof RequirementAnalysis || element instanceof CapabilityAnalysis) { setTarget(element); } else if (element instanceof IUPresentation) { @@ -1532,7 +1587,7 @@ protected TreeViewer createDependentIUsViewer() { showInActionFactories.add(selection -> new ShowInAction("Dependent IUs", selection, iuDependenciesViewer) { @Override protected void handleSelection(Object element) { - if (element instanceof InstallableUnitAnalysis) { + if (element instanceof InstallableUnitAnalysis && element instanceof IInstallableUnit) { setTarget(element); } else if (element instanceof IUPresentation) { setTarget(((IUPresentation) element).getInstallableUnit()); @@ -1565,7 +1620,7 @@ protected TreeViewer createRequiredIUsViewer() { showInActionFactories.add(selection -> new ShowInAction("Required IUs", selection, requiredIUsViewer) { @Override protected void handleSelection(Object element) { - if (element instanceof InstallableUnitAnalysis) { + if (element instanceof InstallableUnitAnalysis || element instanceof IInstallableUnit) { setTarget(element); } else if (element instanceof IUPresentation) { setTarget(((IUPresentation) element).getInstallableUnit()); @@ -1580,7 +1635,9 @@ protected TreeViewer createRepositoryReviewer() { showInActionFactories.add(selection -> new ShowInAction("Aggregated Repository", selection, repositoryViewer) { @Override protected void handleSelection(Object element) { - if (element instanceof InstallableUnitAnalysis) { + if (element instanceof IInstallableUnit) { + setTarget(element); + } else if (element instanceof InstallableUnitAnalysis) { setTarget(((InstallableUnitAnalysis) element).getInstallableUnit()); } else if (element instanceof RequirementAnalysis) { setTarget(((RequirementAnalysis) element).getRequirement()); @@ -1600,7 +1657,7 @@ protected TreeViewer createNamespaceViewer() { @Override protected void handleSelection(Object element) { if (element instanceof ContributionAnalysis || element instanceof InstallableUnitAnalysis - || element instanceof IUPresentation) { + || element instanceof IUPresentation || element instanceof IInstallableUnit) { setTarget(element); } } @@ -1737,6 +1794,378 @@ private SegmentSequence getID(InstallableUnitAnalysis iu) { return namespaceViewer; } + private interface WithLink { + String getURL(); + } + + protected TreeViewer createMavenViewer(Composite parent) { + showInActionFactories.add(selection -> new ShowInAction("Maven", selection, mavenViewer) { + @Override + protected void handleSelection(Object element) { + if (element instanceof IInstallableUnit) { + setTarget(element); + } else if (element instanceof IWrapperItemProvider) { + setTarget(((IWrapperItemProvider) element).getValue()); + } else if (element instanceof IUPresentation) { + setTarget(((IUPresentation) element).getInstallableUnit()); + } else if (element instanceof InstallableUnitAnalysis) { + setTarget(((InstallableUnitAnalysis) element).getInstallableUnit()); + } else if (element instanceof RequirementAnalysis) { + setTarget(((RequirementAnalysis) element).getRequirement()); + } else if (element instanceof CapabilityAnalysis) { + setTarget(((CapabilityAnalysis) element).getCapability()); + } + } + }); + + Map modelParents = new HashMap<>(); + Map dependencyRequirements = new HashMap<>(); + Map dependencyResolutions = new HashMap<>(); + P2ItemProviderAdapterFactory p2ItemProviderAdapterFactory = new P2ItemProviderAdapterFactory() { + @Override + public Adapter createMetadataRepositoryAdapter() { + if (metadataRepositoryItemProvider == null) { + metadataRepositoryItemProvider = new MetadataRepositoryItemProvider(this) { + private Object cachedObject; + private List children; + + @Override + public Collection getChildren(Object object) { + if (children == null || cachedObject != object) { + cachedObject = object; + modelParents.clear(); + + Map poms = new HashMap<>(); + MetadataRepository metadataRepository = (MetadataRepository) object; + EList installableUnits = metadataRepository.getInstallableUnits(); + Map> groups = new TreeMap<>(); + for (IInstallableUnit iu : installableUnits) { + Map properties = iu.getProperties(); + String groupId = null; + String pom = properties.get("maven-pom"); + if (pom != null) { + Resource resource = new PomResourceFactoryImpl() + .createResource(URI.createURI("readonly:")); + try { + resource.load(new URIConverter.ReadableInputStream(pom), null); + Model model = (Model) resource.getContents().get(0).eContents().get(0); + groupId = model.getGroupId(); + poms.put(iu, model); + + List requirements = new ArrayList<>(iu.getRequirements()); + DependenciesType dependencies = model.getDependencies(); + if (dependencies != null) { + EList dependencyList = dependencies.getDependency(); + int dependencyIndex = 0; + String[] resolutions = properties.get("maven-dependency-resolutions") + .split(" "); + for (int requirementIndex : Arrays + .stream(properties.get("maven-dependency-requirements") + .split(" ")) + .map(Integer::parseInt).toArray(Integer[]::new)) { + Dependency dependency = dependencyList.get(dependencyIndex); + if (requirementIndex != -1) { + dependencyRequirements.put(dependency, + requirements.get(requirementIndex)); + } + + dependencyResolutions.put(dependency, resolutions[dependencyIndex]); + + ++dependencyIndex; + } + } + } catch (IOException e) { + AggregationAnalyzerEditorPlugin.INSTANCE.log(e); + } + } + + if (groupId == null) { + groupId = properties.get("maven-groupId"); + } + if (groupId == null) { + groupId = ""; + } + add(groups, groupId, iu); + } + + children = groups.entrySet().stream().map(entry -> { + String groupId = entry.getKey(); + Set ius = entry.getValue(); + + String groupIdLabel = "true" + .equals(ius.iterator().next().getProperty("maven-group-exists")) ? groupId + : groupId + " **"; + + class GroupItemProvider extends ItemProvider implements WithLink { + public GroupItemProvider(AdapterFactory adapterFactory) { + super(adapterFactory, groupIdLabel, + ExtendedImageRegistry.INSTANCE + .getImageDescriptor(AggregationAnalyzerEditorPlugin.INSTANCE + .getImage("full/obj16/namespace")), + metadataRepository); + } + + @Override + public String getURL() { + return AnalyzeHandler.getURL(groupId.toString()); + } + } + + GroupItemProvider groupItemProvider = new GroupItemProvider(parentAdapterFactory); + groupItemProvider.getChildren().addAll(ius.stream().map(iu -> { + class DelegatingWrapperItemProviderWithLink + extends DelegatingWrapperItemProvider implements WithLink { + public DelegatingWrapperItemProviderWithLink( + AdapterFactory adapterFactory) { + super(iu, groupItemProvider, null, -1, adapterFactory); + } + + private String getArtifactId() { + Model model = poms.get(iu); + Map properties = iu.getProperties(); + String artifactId = model == null ? properties.get("maven-artifactId") + : model.getArtifactId(); + if (artifactId == null) { + artifactId = iu.getId(); + } + return artifactId; + } + + @Override + public String getText(Object object) { + Model model = poms.get(iu); + Map properties = iu.getProperties(); + String artifactId = getArtifactId(); + + String classifier = properties.get("maven-classifier"); + if (classifier == null && InstallableUnitUtils.isSourceBundle(iu)) { + classifier = "source"; + } + if (classifier != null) { + artifactId += ":" + classifier; + } + + String version = model == null ? properties.get("maven-version") + : model.getVersion(); + if (version != null) { + artifactId += " / " + version; + } + + boolean artifactExists = "true" + .equals(properties.get("maven-artifact-exists")); + boolean artifactVersionExists = "true" + .equals(properties.get("maven-artifact-version-exists")); + + if (!artifactExists) { + artifactId += " **"; + } else if (!artifactVersionExists) { + artifactId += " *"; + } + + return artifactId; + } + + @Override + public boolean hasChildren(Object object) { + return poms.get(iu) != null; + } + + @Override + public Collection getChildren(Object object) { + Model model = poms.get(iu); + return model == null ? Collections.emptyList() + : Collections.singletonList(model); + } + + @Override + public String getURL() { + return AnalyzeHandler.getURL(groupId, getArtifactId()); + } + } + + DelegatingWrapperItemProviderWithLink result = new DelegatingWrapperItemProviderWithLink( + getRootAdapterFactory()); + modelParents.put(poms.get(iu), result); + return result; + }).collect(Collectors.toList())); + + return groupItemProvider; + }).collect(Collectors.toList()); + + children.sort((i1, i2) -> CommonPlugin.INSTANCE.getComparator().compare(i1.getText(), + i2.getText())); + } + return children; + } + }; + } + + return metadataRepositoryItemProvider; + } + }; + + Styler errorStyler = StyledString.createColorRegistryStyler(JFacePreferences.ERROR_COLOR, null); + + ReflectiveItemProviderAdapterFactory reflectiveItemProviderAdapterFactory = new ReflectiveItemProviderAdapterFactory() { + { + supportedTypes.add(IItemStyledLabelProvider.class); + class MyReflectiveItemProvider extends ReflectiveItemProvider implements IItemStyledLabelProvider { + public MyReflectiveItemProvider(AdapterFactory adapterFactory) { + super(adapterFactory); + } + + @Override + public String getText(Object object) { + return getStyledText(object).toString(); + } + + @Override + public Object getStyledText(Object object) { + if (object instanceof Model) { + Model model = (Model) object; + String name = model.getName(); + return name == null ? model.getArtifactId() : name; + } else if (object instanceof LicensesType) { + return ""; + } else if (object instanceof DependenciesType) { + return ""; + } else if (object instanceof Dependency) { + Dependency dependency = (Dependency) object; + String groupId = dependency.getGroupId(); + String artifactId = dependency.getArtifactId(); + String version = dependency.getVersion(); + String classifier = dependency.getClassifier(); + String scope = dependency.getScope(); + String type = dependency.isSetType() ? dependency.getType() : null; + String optional = dependency.isOptional() ? "?" : null; + StyledString separator = new StyledString().append(" ") + .append(":", StyledString.DECORATIONS_STYLER).append(" "); + IRequirement requirement = (IRequiredCapability) dependencyRequirements.get(dependency); + String string = requirement == null ? null : requirement.toString(); + String resolution = dependencyResolutions.get(dependency); + Collector collector = new Collector() { + + boolean first = true; + + @Override + public Supplier supplier() { + return StyledString::new; + } + + @Override + public BiConsumer accumulator() { + return (s, e) -> { + if (first) { + first = false; + } else { + s.append(separator); + } + if (e == groupId || e == string) { + s.append(e, StyledString.QUALIFIER_STYLER); + } else if (e == resolution && resolution.contains("**")) { + s.append(e, errorStyler); + } else if (e == version || e == resolution) { + s.append(e, StyledString.COUNTER_STYLER); + } else { + s.append(e); + } + }; + } + + @Override + public BinaryOperator combiner() { + return (left, right) -> left.append(right); + } + + @Override + public Function finisher() { + return Function.identity(); + } + + @Override + public Set characteristics() { + return Set.of(Characteristics.UNORDERED); + } + }; + + return Arrays + .asList(new String[] { groupId, artifactId, version, classifier, scope, type, + optional, string, resolution }) + .stream().filter(it -> it != null && !it.isBlank()).collect(collector); + } + return super.getText(object); + } + + public Object getImage(Object object) { + if (object instanceof Model) { + return AggregationAnalyzerEditorPlugin.INSTANCE.getImage("full/obj16/pom"); + } else if (object instanceof LicensesType || object instanceof DependenciesType) { + return AggregationAnalyzerEditorPlugin.INSTANCE.getImage("full/obj16/element"); + } else if (object instanceof Dependency) { + return AggregationAnalyzerEditorPlugin.INSTANCE.getImage("full/obj16/dependency"); + } + return super.getImage(object); + } + + @Override + public Command createCommand(Object object, EditingDomain domain, + Class commandClass, CommandParameter commandParameter) { + return UnexecutableCommand.INSTANCE; + } + + @Override + protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) { + } + + @Override + public Object getParent(Object object) { + Object parent = modelParents.get(object); + return parent != null ? parent : super.getParent(object); + } + } + reflectiveItemProviderAdapter = new MyReflectiveItemProvider(this); + } + + @Override + public Adapter createAdapter(Notifier target) { + return super.createAdapter(target); + } + + }; + + ComposedAdapterFactory composedAdapterFactory = new ComposedAdapterFactory(new AdapterFactory[] { + reflectiveItemProviderAdapterFactory, p2ItemProviderAdapterFactory, adapterFactory }); + Runnable setLabelProvider = () -> { + StyledLabelProvider labelProvider = new StyledLabelProvider(composedAdapterFactory, mavenViewer); + CellLabelProvider labelProvider2 = new DelegatingStyledCellLabelProvider(labelProvider); + mavenViewer.setLabelProvider(labelProvider2); + }; + + mavenViewer = createTreeViewer(parent, "Maven", null, menuManager -> { + String label = AggregationAnalyzerEditorPlugin.INSTANCE.getString("_UI_RefreshViewer_menu_item"); + for (IContributionItem item : menuManager.getItems()) { + if (item instanceof ActionContributionItem) { + IAction action = ((ActionContributionItem) item).getAction(); + if (label.equals(action.getText())) { + menuManager.insertAfter("ui-actions", new Action(label) { + @Override + public void run() { + setLabelProvider.run(); + action.run(); + } + }); + menuManager.remove(item); + break; + } + } + } + }); + mavenViewer.setContentProvider(new AdapterFactoryContentProvider(composedAdapterFactory)); + setLabelProvider.run(); + + return mavenViewer; + } + private static class Link { public static final Link NONE = new Link(null, null, null); @@ -1765,11 +2194,6 @@ public Set getDependencies() { } private GraphViewer createGraphViewer() { - // TreeNode root = (TreeNode) resource.getContents().get(0); - // EList children = root.getChildren(); - // Map contributions = children.stream() - // .collect(Collectors.toMap(it -> it.getData(), it -> it)); - GraphViewer graphViewer = new GraphViewer(getContainer(), SWT.NONE); Graph graph = graphViewer.getGraphControl(); int pageIndex = addPage(graph); @@ -1802,8 +2226,7 @@ class MyContentProvider implements IGraphEntityRelationshipContentProvider { @Override public Object[] getElements(Object inputElement) { - Analysis analysis = (Analysis) EcoreUtil.getObjectByType(((Resource) inputElement).getContents(), - AnalyzerPackage.Literals.ANALYSIS); + Analysis analysis = getAnalysis((Resource) inputElement); if (analysis != null) { EList contributions = analysis.getContributions(); if (this.analysis != analysis) { @@ -2601,8 +3024,7 @@ protected void doReset(boolean revert) { doRevertGen(); } analyzer = new AtomicReference<>(); - Analysis analysis = (Analysis) EcoreUtil.getObjectByType( - editingDomain.getResourceSet().getResources().get(0).getContents(), AnalyzerPackage.Literals.ANALYSIS); + Analysis analysis = getAnalysis(); if (analysis != null) { analyzer.set(new AnalyzeHandler.Analyzer(analysis)); } @@ -2967,38 +3389,58 @@ protected void createShowInBrowserActions(IStructuredSelection selection, IMenuM MenuManager showInBrowserMenu = new MenuManager("Show In Browser"); manager.insertAfter("show-in", showInBrowserMenu); for (Object object : selection.toArray()) { - if (object instanceof EObject) { - EObject eObject = (EObject) object; - handle(eObject, showInBrowserMenu); + handleShowInBrowser(object, showInBrowserMenu); + } + } + + protected void handleShowInBrowser(Object object, IMenuManager showInBrowserMenu) { + if (object instanceof Dependency) { + Dependency dependency = (Dependency) object; + addShowInBrowserAction( + URI.createURI( + AnalyzeHandler.getURL(dependency.getGroupId().toString(), dependency.getArtifactId())), + showInBrowserMenu); + } else if (object instanceof EObject) { + EObject eObject = (EObject) object; + handleShowInBrowser(eObject, showInBrowserMenu); + showInBrowserMenu.add(new Separator()); + for (EObject eContent : eObject.eContents()) { + handleShowInBrowser(eContent, showInBrowserMenu); showInBrowserMenu.add(new Separator()); - for (EObject eContent : eObject.eContents()) { - handle(eContent, showInBrowserMenu); - showInBrowserMenu.add(new Separator()); - } + } + } else if (object instanceof WithLink) { + String url = ((WithLink) object).getURL(); + if (url != null) { + addShowInBrowserAction(URI.createURI(url), showInBrowserMenu); } } } - protected void handle(EObject eObject, IMenuManager showInBrowserMenu) { + protected void handleShowInBrowser(EObject eObject, IMenuManager showInBrowserMenu) { for (EAttribute eAttribute : eObject.eClass().getEAllAttributes()) { if (eAttribute.getEType().getInstanceClass() == URI.class) { URI uri = (URI) eObject.eGet(eAttribute); if (uri != null) { - showInBrowserMenu.add(new Action(uri.toString()) { - @Override - public void run() { - String url = uri.toString(); - if (url.startsWith("https://git.eclipse.org/r/")) { - url = url.replace("/r/", "/c/") + ".git"; - } - openInBrowser(url); - } - }); + addShowInBrowserAction(uri, showInBrowserMenu); } } } } + protected void addShowInBrowserAction(URI uri, IMenuManager showInBrowserMenu) { + showInBrowserMenu.add(new Action(uri.toString()) { + @Override + public void run() { + String url = uri.toString(); + if (url.startsWith("https://git.eclipse.org/r/")) { + url = url.replace("/r/", "/c/") + ".git"; + } + openInBrowser(url); + } + }); + + } + /** * * @@ -3069,7 +3511,6 @@ protected boolean showOutlineView() { @SuppressWarnings("unused") private void breakpoint() { // In some lambdas one cannot set a breakpoint so call this method and set the breakpoint here. - System.err.println("###"); } public static Set getSet(Map> map, K key) { @@ -3279,7 +3720,7 @@ protected boolean matches(Object object) { } else if (object instanceof RequirementWrapper) { return ((RequirementWrapper) object).getGenuine() == target; } else if (object instanceof IUPresentation) { - return ((IUPresentation) object).getInstallableUnit() == target; + return Objects.equals(((IUPresentation) object).getInstallableUnit(), target); } else if (object instanceof InstallableUnitAnalysis) { IInstallableUnit installableUnit = ((InstallableUnitAnalysis) object).getInstallableUnit(); if (target instanceof IInstallableUnit) { diff --git a/plugins/org.eclipse.cbi.p2repo.aggregator.analyzer.editor/src/org/eclipse/cbi/p2repo/aggregator/analyzer/presentation/handlers/AnalyzeHandler.java b/plugins/org.eclipse.cbi.p2repo.aggregator.analyzer.editor/src/org/eclipse/cbi/p2repo/aggregator/analyzer/presentation/handlers/AnalyzeHandler.java index 44edb2818..8f5c4b04a 100644 --- a/plugins/org.eclipse.cbi.p2repo.aggregator.analyzer.editor/src/org/eclipse/cbi/p2repo/aggregator/analyzer/presentation/handlers/AnalyzeHandler.java +++ b/plugins/org.eclipse.cbi.p2repo.aggregator.analyzer.editor/src/org/eclipse/cbi/p2repo/aggregator/analyzer/presentation/handlers/AnalyzeHandler.java @@ -11,8 +11,8 @@ package org.eclipse.cbi.p2repo.aggregator.analyzer.presentation.handlers; import java.io.File; +import java.io.IOException; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; import java.util.Comparator; import java.util.HashMap; @@ -34,10 +34,17 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; +import org.apache.maven.artifact.versioning.ArtifactVersion; +import org.apache.maven.artifact.versioning.DefaultArtifactVersion; +import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException; +import org.apache.maven.model.Dependency; +import org.apache.maven.model.InputLocation; +import org.apache.maven.model.Model; import org.eclipse.cbi.p2repo.aggregator.Aggregation; import org.eclipse.cbi.p2repo.aggregator.Contribution; import org.eclipse.cbi.p2repo.aggregator.MappedRepository; import org.eclipse.cbi.p2repo.aggregator.MappedUnit; +import org.eclipse.cbi.p2repo.aggregator.MavenMapping; import org.eclipse.cbi.p2repo.aggregator.ValidationSet; import org.eclipse.cbi.p2repo.aggregator.analyzer.Analysis; import org.eclipse.cbi.p2repo.aggregator.analyzer.AnalyzerFactory; @@ -47,45 +54,54 @@ import org.eclipse.cbi.p2repo.aggregator.analyzer.InstallableUnitAnalysis; import org.eclipse.cbi.p2repo.aggregator.analyzer.RequirementAnalysis; import org.eclipse.cbi.p2repo.aggregator.analyzer.RequirementResolution; +import org.eclipse.cbi.p2repo.aggregator.analyzer.presentation.AggregationAnalyzerEditorPlugin; import org.eclipse.cbi.p2repo.aggregator.engine.Builder; import org.eclipse.cbi.p2repo.aggregator.engine.Builder.ActionType; +import org.eclipse.cbi.p2repo.aggregator.engine.maven.InstallableUnitMapping; +import org.eclipse.cbi.p2repo.aggregator.engine.maven.MavenManager; import org.eclipse.cbi.p2repo.aggregator.p2.util.MetadataRepositoryResourceFactoryImpl; import org.eclipse.cbi.p2repo.aggregator.p2view.util.MetadataRepositoryStructuredViewBuilder; +import org.eclipse.cbi.p2repo.aggregator.provider.MavenMappingItemProvider; +import org.eclipse.cbi.p2repo.aggregator.util.InstallableUnitUtils; import org.eclipse.cbi.p2repo.p2.InstallableUnit; import org.eclipse.cbi.p2repo.p2.MetadataRepository; import org.eclipse.cbi.p2repo.p2.P2Factory; import org.eclipse.cbi.p2repo.p2.impl.MetadataRepositoryImpl; +import org.eclipse.cbi.p2repo.p2.maven.metadata.MetaData; +import org.eclipse.cbi.p2repo.p2.maven.metadata.MetadataPackage; +import org.eclipse.cbi.p2repo.p2.maven.metadata.Versioning; +import org.eclipse.cbi.p2repo.p2.maven.metadata.VersionsType; +import org.eclipse.cbi.p2repo.p2.maven.util.VersionUtil; import org.eclipse.cbi.p2repo.p2.util.P2Bridge; -import org.eclipse.cbi.p2repo.p2.util.P2ResourceFactoryImpl; import org.eclipse.cbi.p2repo.p2.util.P2Utils; import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.core.runtime.Platform; +import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.SubMonitor; import org.eclipse.emf.common.CommonPlugin; import org.eclipse.emf.common.util.ECollections; import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.common.util.EMap; +import org.eclipse.emf.common.util.TreeIterator; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; +import org.eclipse.emf.ecore.resource.URIConverter; import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.emf.ecore.xmi.XMLResource; import org.eclipse.equinox.internal.p2.metadata.IRequiredCapability; import org.eclipse.equinox.internal.p2.metadata.RequiredPropertiesMatch; import org.eclipse.equinox.internal.p2.metadata.ResolvedInstallableUnit; -import org.eclipse.equinox.internal.p2.metadata.TranslationSupport; -import org.eclipse.equinox.internal.p2.metadata.index.CapabilityIndex; -import org.eclipse.equinox.internal.p2.metadata.index.IdIndex; -import org.eclipse.equinox.internal.p2.metadata.index.IndexProvider; import org.eclipse.equinox.p2.metadata.IInstallableUnit; import org.eclipse.equinox.p2.metadata.IProvidedCapability; import org.eclipse.equinox.p2.metadata.IRequirement; -import org.eclipse.equinox.p2.metadata.KeyWithLocale; import org.eclipse.equinox.p2.metadata.Version; import org.eclipse.equinox.p2.metadata.VersionRange; import org.eclipse.equinox.p2.metadata.expression.IFilterExpression; import org.eclipse.equinox.p2.metadata.expression.IMatchExpression; -import org.eclipse.equinox.p2.metadata.index.IIndex; import org.eclipse.equinox.p2.query.IQuery; import org.eclipse.equinox.p2.query.IQueryResult; import org.eclipse.equinox.p2.query.IQueryable; @@ -102,8 +118,6 @@ public class AnalyzeHandler extends BaseHandler { public static String AGGREGATE_REPOSITORY_LOCATION = "readonly://aggregation.result.p2"; - public static final URI AGGREGATE_REPOSITORY = (URI.createURI("p2aggr:p2:" + AGGREGATE_REPOSITORY_LOCATION)); - public static String STRUCTURED_AGGREGATE_REPOSITORY_LOCATION = "readonly://aggregation.structured.result.p2"; public static final URI STRUCTURED_AGGREGATE_REPOSITORY = (URI @@ -124,11 +138,11 @@ public static class Analyzer extends Activity { private Analysis originalAnalysis; private Analysis result; private ExecutorService executor; - private Resource aggregateMetadataRepositoryResource; private Resource structuredAggregateMetadataRepositoryResource; private Builder builder; private List duplicates; private List strictRequirements; + private MetadataRepository aggregateMetadataRepository; public Analyzer(Analysis analysis) { this.originalAnalysis = analysis; @@ -159,6 +173,7 @@ private Builder getBuilder(IProgressMonitor monitor) throws Exception { if (resolvedURI != null) { builder = new Builder(); builder.setAction(ActionType.VALIDATE); + builder.setAnalyzeMaven(true); builder.setBuildModelLocation(new File(resolvedURI.toFileString())); builder.setProvisioningAgent(P2Utils.getDefaultProvisioningAgent()); builder.run(false, monitor); @@ -186,7 +201,6 @@ protected void asyncExec() { resultResource.getContents().add(result); resources.add(resultResource); - resources.add(aggregateMetadataRepositoryResource); resources.add(structuredAggregateMetadataRepositoryResource); Resource duplicateResultResource = resourceSet.getResourceFactoryRegistry() @@ -202,6 +216,177 @@ protected void asyncExec() { } } + private void gatherPOMs(SubMonitor monitor, Map modeledIUs, + InstallableUnitMapping iuMapping, + Pattern exclusion, Set mavenMappings, Map> localArtifactVersions, + Collection> metadata, List versionRangeAnalyzers) { + try { + IInstallableUnit genuine = iuMapping.getGenuine(); + InstallableUnit iu = modeledIUs.get(genuine); + if (iu != null && (exclusion == null || !exclusion.matcher(iu.getId()).matches())) { + EMap properties = iu.getPropertyMap(); + if (!properties.containsKey("maven-pom")) { + ResourceSet resourceSet = ((EObject) genuine).eResource().getResourceSet(); + + Model model = iuMapping.asPOM(); + mavenMappings.addAll(iuMapping.getUsedMavenMappings()); + String groupId = model.getGroupId(); + String groupURL = getURL(groupId); + URI groupURI = URI.createURI(groupURL); + metadata.add(getExecutor().submit(() -> { + monitor.subTask("Analyzing Maven mappings " + groupURI); + String groupFolderContent; + synchronized (groupURI) { + groupFolderContent = getContentOrEmpty(groupURI); + } + synchronized (properties) { + properties.put("maven-group-exists", Objects.toString(!groupFolderContent.isEmpty())); + } + })); + + String artifactId = model.getArtifactId(); + String artifactURL = getURL(groupId, artifactId); + String artifactMetadataURL = artifactURL + "maven-metadata.xml"; + URI artifactMetadataURI = URI.createURI(artifactMetadataURL); + metadata.add(getExecutor().submit(() -> { + monitor.subTask("Analyzing Maven mappings " + artifactMetadataURL); + MetaData metaData = getMetaData(resourceSet, artifactMetadataURI); + String version = model.getVersion(); + + synchronized (metadata) { + localArtifactVersions + .computeIfAbsent(groupId + ":" + artifactId, key -> new LinkedHashSet()) + .add(version); + } + + String plainVersion = VersionUtil.versionNotAsSnapshot(version); + String artifactPOMURL = artifactURL + plainVersion + "/" + artifactId + "-" + plainVersion + + ".pom"; + URI artifactPOMURI = URI.createURI(artifactPOMURL); + String artifactPOM; + synchronized (artifactPOMURI) { + artifactPOM = getContentOrEmpty(artifactPOMURI); + } + + synchronized (properties) { + properties.put("maven-artifact-exists", Objects.toString(metaData != null)); + properties.put("maven-artifact-version-exists", + Objects.toString(!artifactPOM.isEmpty())); + properties.put("maven-pom", MavenManager.toXML(model)); + } + })); + + versionRangeAnalyzers.add(() -> { + List dependencies = model.getDependencies(); + List dependencyMapping = new ArrayList(); + List dependencyResolutions = new ArrayList(); + for (Dependency dependency : dependencies) { + InputLocation location = dependency.getLocation(""); + int lineNumber = location.getLineNumber(); + dependencyMapping.add(Integer.toString(lineNumber)); + + org.apache.maven.artifact.versioning.VersionRange range; + try { + String dependencyVersionRange = dependency.getVersion() + .replace(VersionUtil.DASH_SNAPSHOT, ""); + range = org.apache.maven.artifact.versioning.VersionRange + .createFromVersionSpec(dependencyVersionRange); + } catch (InvalidVersionSpecificationException e) { + AggregationAnalyzerEditorPlugin.INSTANCE.log(e); + dependencyResolutions.add("**invalid-version-range"); + continue; + } + + String unresolved = "**" + range; + String dependencyResolution = unresolved; + String dependencyGroupId = dependency.getGroupId(); + String dependencyArtifactId = dependency.getArtifactId(); + URI dependencyMetadataURL = URI.createURI( + getURL(dependencyGroupId, dependencyArtifactId) + "maven-metadata.xml"); + MetaData dependencyMetaData = getMetaData(resourceSet, dependencyMetadataURL); + if (dependencyMetaData != null) { + Versioning versioning = dependencyMetaData.getVersioning(); + VersionsType versionsType = versioning.getVersions(); + List artifactVersions = versionsType.getVersion().stream() + .map(it -> new DefaultArtifactVersion(it)).collect(Collectors.toList()); + ArtifactVersion matchVersion = range.matchVersion(artifactVersions); + if (matchVersion == null) { + Set localVersions = localArtifactVersions.get( + dependencyGroupId + ":" + resolveOSGiPlatform(dependencyArtifactId)); + if (localVersions != null) { + List versions = localVersions.stream() + .map(it -> new DefaultArtifactVersion( + VersionUtil.versionNotAsSnapshot(it))) + .collect(Collectors.toList()); + matchVersion = range.matchVersion(versions); + if (matchVersion != null) { + dependencyResolution = "~" + matchVersion.toString(); + } + } + } else { + dependencyResolution = "^" + matchVersion.toString(); + } + } else { + dependencyResolution = "**" + dependencyMetadataURL; + } + + dependencyResolutions.add(dependencyResolution); + } + + properties.put("maven-dependency-requirements", String.join(" ", dependencyMapping)); + properties.put("maven-dependency-resolutions", String.join(" ", dependencyResolutions)); + }); + } + } + } catch (RuntimeException ex) { + AggregationAnalyzerEditorPlugin.INSTANCE.log(ex); + } + + List siblings = iuMapping.getSiblings(); + for (InstallableUnitMapping sibling : siblings) { + gatherPOMs(monitor, modeledIUs, sibling, exclusion, mavenMappings, localArtifactVersions, metadata, + versionRangeAnalyzers); + } + + List children = iuMapping.getChildren(); + for (InstallableUnitMapping childMapping : children) { + gatherPOMs(monitor, modeledIUs, childMapping, exclusion, mavenMappings, localArtifactVersions, metadata, + versionRangeAnalyzers); + } + } + + private Resource getMetaDataResource(ResourceSet resourceSet, URI mavenMetadataURI) { + Resource resource = null; + synchronized (resourceSet) { + resource = resourceSet.getResource(mavenMetadataURI, false); + if (resource == null) { + resource = resourceSet.createResource(mavenMetadataURI, MetadataPackage.eCONTENT_TYPE); + String artifactMetadata = getContentOrEmpty(mavenMetadataURI); + try { + resource.load(new URIConverter.ReadableInputStream(artifactMetadata), null); + } catch (IOException e) { + } + } + } + return resource; + } + + private MetaData getMetaData(ResourceSet resourceSet, URI mavenMetadataURI) { + Resource resource = getMetaDataResource(resourceSet, mavenMetadataURI); + EList contents = resource.getContents(); + if (!contents.isEmpty()) { + EObject eObject = contents.get(0); + EList eContents = eObject.eContents(); + if (!eContents.isEmpty()) { + EObject root = eContents.get(0); + if (root instanceof MetaData) { + return (MetaData) root; + } + } + } + return null; + } + private List analyzeDuplicates(Analysis analysis) { Map> ius = new TreeMap<>(); analysis.getContributions().stream().flatMap(c -> c.getInstallableUnits().stream()).forEach(iu -> { @@ -277,15 +462,15 @@ public Analysis analyze(IProgressMonitor monitor) throws Exception { .collect(Collectors.toSet())); } - MetadataRepositoryImpl aggregateMetadataRepository = (MetadataRepositoryImpl) P2Factory.eINSTANCE - .createMetadataRepository(); - aggregateMetadataRepository.setLocation(new java.net.URI(AGGREGATE_REPOSITORY_LOCATION)); + aggregateMetadataRepository = P2Factory.eINSTANCE.createMetadataRepository(); + ((MetadataRepositoryImpl) aggregateMetadataRepository) + .setLocation(new java.net.URI(AGGREGATE_REPOSITORY_LOCATION)); Map modeledIUs = allUnitsToAggregate.stream() .collect(Collectors.toMap(Function.identity(), iu -> P2Bridge.importToModel(iu))); aggregateMetadataRepository.getInstallableUnits().addAll(new TreeSet<>(modeledIUs.values())); - IQueryable queriable = new QueryableArray(modeledIUs.values()); + IQueryable queriable = InstallableUnitUtils.getIndex(modeledIUs.values()); Set contributionsWithDuplicateRepositories = new HashSet<>(); Map owningContributions = new HashMap<>(); @@ -333,14 +518,57 @@ public Analysis analyze(IProgressMonitor monitor) throws Exception { } } - Set remainingIUs = modeledIUs.keySet(); - - Map usedIUs = new LinkedHashMap<>(); + subMonitor.worked(1); Analysis analysis = EcoreUtil.copy(originalAnalysis); - Pattern exclusion = analysis.getExclusion(); + InstallableUnitMapping iuMapping = builder.getInstallableUnitMapping(); + if (iuMapping != null) { + subMonitor.subTask("Analyzing Maven mappings"); + + Set usedMavenMappings = new LinkedHashSet(); + List versionRangeAnalyzers = new ArrayList(); + Map> localArtifactVersions = new TreeMap>(); + List> metadata = new ArrayList>(); + SubMonitor pomAnalyzer = subMonitor.newChild(1); + gatherPOMs(pomAnalyzer, modeledIUs, iuMapping, exclusion, usedMavenMappings, + localArtifactVersions, metadata, + versionRangeAnalyzers); + + pomAnalyzer.setWorkRemaining(metadata.size()); + for (Future future : metadata) { + future.get(); + pomAnalyzer.worked(1); + } + + versionRangeAnalyzers.forEach(Runnable::run); + + Set mavenMappings = new LinkedHashSet(); + for (TreeIterator eAllContents = ((EObject) builder.getAggregation()) + .eAllContents(); eAllContents.hasNext();) { + EObject eObject = eAllContents.next(); + if (eObject instanceof MavenMapping) { + mavenMappings.add((MavenMapping) eObject); + } + } + + mavenMappings.removeAll(usedMavenMappings); + + if (!mavenMappings.isEmpty()) { + MavenMappingItemProvider mavenMappingItemProvider = new MavenMappingItemProvider(null); + for (MavenMapping unusedMavenMapping : mavenMappings) { + AggregationAnalyzerEditorPlugin.INSTANCE.log(new Status(IStatus.WARNING, + AggregationAnalyzerEditorPlugin.INSTANCE.getSymbolicName(), + "Unsed Mapping " + mavenMappingItemProvider.getText(unusedMavenMapping))); + } + } + } + + Set remainingIUs = modeledIUs.keySet(); + + Map usedIUs = new LinkedHashMap<>(); + subMonitor.worked(1); subMonitor.subTask("Partitioning contributions"); @@ -485,10 +713,6 @@ public Analysis analyze(IProgressMonitor monitor) throws Exception { aggregateMetadataRepository.getInstallableUnits().retainAll(usedIUs.keySet()); - aggregateMetadataRepositoryResource = new P2ResourceFactoryImpl() - .createResource(AGGREGATE_REPOSITORY); - aggregateMetadataRepositoryResource.getContents().add(aggregateMetadataRepository); - structuredAggregateMetadataRepositoryResource = new MetadataRepositoryResourceFactoryImpl() .createResource(STRUCTURED_AGGREGATE_REPOSITORY); structuredAggregateMetadataRepositoryResource.getContents() @@ -565,50 +789,17 @@ private void collectChildren(IQueryable queriable, Set { - private final List dataSet; - private final IIndex capabilityIndex; - private final IIndex idIndex; - private final TranslationSupport translationSupport; - - public QueryableArray(IInstallableUnit[] ius) { - this(Arrays.asList(ius)); - } - - public QueryableArray(Collection ius) { - dataSet = new ArrayList<>(ius); - capabilityIndex = new CapabilityIndex(dataSet.iterator()); - idIndex = new IdIndex(dataSet.iterator()); - translationSupport = new TranslationSupport(this); - } + public static final String OSGI_PLATFORM = Platform.getOS() + '.' + Platform.getWS() + '.' + Platform.getOSArch(); - @Override - public Iterator everything() { - return dataSet.iterator(); - } + public static String getURL(String groupId) { + return "https://repo1.maven.org/maven2/" + groupId.replace('.', '/') + "/"; + } - @Override - public IIndex getIndex(String memberName) { - if (org.eclipse.equinox.internal.p2.metadata.InstallableUnit.MEMBER_PROVIDED_CAPABILITIES - .equals(memberName)) { - return capabilityIndex; - } - if (org.eclipse.equinox.internal.p2.metadata.InstallableUnit.MEMBER_ID.equals(memberName)) { - return idIndex; - } - return null; - } + public static String getURL(String groupId, String artifactId) { + return getURL(groupId) + resolveOSGiPlatform(artifactId) + "/"; + } - @Override - public Object getManagedProperty(Object client, String memberName, Object key) { - if (client instanceof IInstallableUnit - && org.eclipse.equinox.internal.p2.metadata.InstallableUnit.MEMBER_TRANSLATED_PROPERTIES - .equals(memberName)) { - IInstallableUnit iu = (IInstallableUnit) client; - return key instanceof KeyWithLocale ? translationSupport.getIUProperty(iu, (KeyWithLocale) key) - : translationSupport.getIUProperty(iu, key.toString()); - } - return null; - } + public static String resolveOSGiPlatform(String artifactId) { + return artifactId.replace("${osgi.platform}", OSGI_PLATFORM); } } diff --git a/plugins/org.eclipse.cbi.p2repo.aggregator.analyzer.editor/src/org/eclipse/cbi/p2repo/aggregator/analyzer/presentation/handlers/BaseHandler.java b/plugins/org.eclipse.cbi.p2repo.aggregator.analyzer.editor/src/org/eclipse/cbi/p2repo/aggregator/analyzer/presentation/handlers/BaseHandler.java index 7cecafc72..5db1771fa 100644 --- a/plugins/org.eclipse.cbi.p2repo.aggregator.analyzer.editor/src/org/eclipse/cbi/p2repo/aggregator/analyzer/presentation/handlers/BaseHandler.java +++ b/plugins/org.eclipse.cbi.p2repo.aggregator.analyzer.editor/src/org/eclipse/cbi/p2repo/aggregator/analyzer/presentation/handlers/BaseHandler.java @@ -64,10 +64,13 @@ public abstract class BaseHandler extends AbstractHandler { protected static Path CACHE = Path .of(AggregationAnalyzerEditorPlugin.getPlugin().getStateLocation().append("cache").toOSString()); - protected static Path getCachePath(URI uri) throws IOException { + protected static Path getCachePath(URI uri) { String decodedURI = URI.decode(uri.toString()); String[] uriSegments = decodedURI.split("[:/?#&;]+"); Path result = CACHE.resolve(String.join("/", uriSegments)); + if (uri.hasTrailingPathSeparator()) { + return result.resolve("-folder-contents"); + } return result; } @@ -85,6 +88,36 @@ protected static String getContent(URI uri) throws IOException { } } + protected static String getContentOrEmpty(URI uri) { + Path path = getCachePath(uri); + if (Files.isRegularFile(path)) { + try { + return Files.readString(path); + } catch (IOException e) { + return ""; + } + } + + try { + Files.createDirectories(path.getParent()); + } catch (IOException e) { + throw new RuntimeException(e); + } + + try (InputStream in = URIConverter.INSTANCE.createInputStream(uri)) { + String content = new String(in.readAllBytes(), StandardCharsets.UTF_8); + Files.writeString(path, content); + return content; + } catch (IOException e) { + try { + Files.writeString(path, ""); + } catch (IOException e1) { + //$FALL-THROUGH$ + } + return ""; + } + } + protected static Long getLastModified(URI logURI, Pattern datePattern, String dateFormat) throws Exception { String content = getContent(logURI); Matcher timeMatcher = datePattern.matcher(content); diff --git a/plugins/org.eclipse.cbi.p2repo.aggregator.analyzer.editor/src/org/eclipse/cbi/p2repo/aggregator/analyzer/presentation/handlers/ClearCacheHandler.java b/plugins/org.eclipse.cbi.p2repo.aggregator.analyzer.editor/src/org/eclipse/cbi/p2repo/aggregator/analyzer/presentation/handlers/ClearCacheHandler.java index f34daadcb..c728ca5f9 100644 --- a/plugins/org.eclipse.cbi.p2repo.aggregator.analyzer.editor/src/org/eclipse/cbi/p2repo/aggregator/analyzer/presentation/handlers/ClearCacheHandler.java +++ b/plugins/org.eclipse.cbi.p2repo.aggregator.analyzer.editor/src/org/eclipse/cbi/p2repo/aggregator/analyzer/presentation/handlers/ClearCacheHandler.java @@ -11,12 +11,8 @@ package org.eclipse.cbi.p2repo.aggregator.analyzer.presentation.handlers; import java.io.IOException; -import java.nio.file.FileVisitResult; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.SimpleFileVisitor; -import java.nio.file.attribute.BasicFileAttributes; +import org.eclipse.cbi.p2repo.util.IOUtils; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; @@ -25,21 +21,7 @@ public class ClearCacheHandler extends BaseHandler { @Override public Object execute(ExecutionEvent event) throws ExecutionException { try { - Files.walkFileTree(CACHE, new SimpleFileVisitor() { - @Override - public FileVisitResult visitFile(Path file, BasicFileAttributes attributes) throws IOException { - Files.delete(file); - return FileVisitResult.CONTINUE; - } - - @Override - public FileVisitResult postVisitDirectory(Path directory, IOException exception) throws IOException { - if (exception == null) { - Files.delete(directory); - } - return super.postVisitDirectory(directory, exception); - } - }); + IOUtils.delete(CACHE); } catch (IOException e) { throw new ExecutionException(e.getLocalizedMessage(), e); } diff --git a/plugins/org.eclipse.cbi.p2repo.aggregator.edit/icons/full/obj16/MavenDependencyItem.gif b/plugins/org.eclipse.cbi.p2repo.aggregator.edit/icons/full/obj16/MavenDependencyItem.gif new file mode 100644 index 0000000000000000000000000000000000000000..cdd3b76e3c0b3318166d84292d8d9e2146a48aa1 GIT binary patch literal 129 zcmZ?wbhEHb6krfw*vtS14M4Jip`qcxfddT<4GjN*-2XuK|Nmgte-L}loH;~uRaQAn7P!5RR$)-TWi literal 0 HcmV?d00001 diff --git a/plugins/org.eclipse.cbi.p2repo.aggregator.edit/icons/full/obj16/MavenDependencyMapping.gif b/plugins/org.eclipse.cbi.p2repo.aggregator.edit/icons/full/obj16/MavenDependencyMapping.gif new file mode 100644 index 0000000000000000000000000000000000000000..0dbcfe85e718d6f59c07243b80682e0bf0c1c02c GIT binary patch literal 370 zcmZ?wbhEHb6krfwSZc{2ZWQ~UfkDYRUB@-=wS>rDVd2-3A~_C{e?;RcAIy)yVIXHRA!L3WDeVH=l%hajA z7A!crdGYFytNMo&d?WUthm@^ZNa#*B^lB z^VfIpK7RP{_5J(LpFe#5{PFXb4`080`TgzPukY`EeE$zN%i6)3TzcY=R`OzF$WyX z@Sh_yJxH2e?#z>g0ylDG7#UT{?75YUn|Snfd76xsxZQX~^qM%tL^+%EczGwwiZn^F zvPw7cO3t_ERhDfMWMLC(l2lkNps3uWuvcM^eCy6V` * @generated */ - @Override - protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) { + private void collectNewChildDescriptorsGen(Collection newChildDescriptors, Object object) { super.collectNewChildDescriptors(newChildDescriptors, object); newChildDescriptors.add(createChildParameter(AggregatorPackage.Literals.AGGREGATION__VALIDATION_SETS, @@ -260,6 +262,29 @@ protected void collectNewChildDescriptors(Collection newChildDescriptors newChildDescriptors.add(createChildParameter(AggregatorPackage.Literals.AGGREGATION__MAVEN_MAPPINGS, AggregatorFactory.eINSTANCE.createMavenMapping())); + + newChildDescriptors.add(createChildParameter(AggregatorPackage.Literals.AGGREGATION__MAVEN_DEPENDENCY_MAPPINGS, + AggregatorFactory.eINSTANCE.createMavenDependencyMapping())); + } + + @Override + protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) { + collectNewChildDescriptorsGen(newChildDescriptors, object); + + ContributionItemProvider.addNewChildDescriptor(this::createChildParameter, newChildDescriptors, + AggregatorPackage.Literals.AGGREGATION__MAVEN_MAPPINGS, + ContributionItemProvider.createGenericMavenMapping()); + ContributionItemProvider.addNewChildDescriptor(this::createChildParameter, newChildDescriptors, + AggregatorPackage.Literals.AGGREGATION__MAVEN_DEPENDENCY_MAPPINGS, + ContributionItemProvider.createJavaPackageMapping()); + } + + @Override + public String getCreateChildText(Object owner, Object feature, Object child, Collection selection) { + if (child instanceof MavenDependencyMapping || child instanceof MavenMapping) { + return new AdapterFactoryItemDelegator(getRootAdapterFactory()).getText(child); + } + return super.getCreateChildText(owner, feature, child, selection); } /** @@ -292,6 +317,7 @@ public Collection getChildrenFeatures(Object objec childrenFeatures.add(AggregatorPackage.Literals.AGGREGATION__CUSTOM_CATEGORIES); childrenFeatures.add(AggregatorPackage.Literals.AGGREGATION__CONTACTS); childrenFeatures.add(AggregatorPackage.Literals.AGGREGATION__MAVEN_MAPPINGS); + childrenFeatures.add(AggregatorPackage.Literals.AGGREGATION__MAVEN_DEPENDENCY_MAPPINGS); } return childrenFeatures; } @@ -399,6 +425,7 @@ public void notifyChanged(Notification notification) { case AggregatorPackage.AGGREGATION__CUSTOM_CATEGORIES: case AggregatorPackage.AGGREGATION__CONTACTS: case AggregatorPackage.AGGREGATION__MAVEN_MAPPINGS: + case AggregatorPackage.AGGREGATION__MAVEN_DEPENDENCY_MAPPINGS: fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false)); return; } diff --git a/plugins/org.eclipse.cbi.p2repo.aggregator.edit/src/org/eclipse/cbi/p2repo/aggregator/provider/AggregatorItemProviderAdapterFactory.java b/plugins/org.eclipse.cbi.p2repo.aggregator.edit/src/org/eclipse/cbi/p2repo/aggregator/provider/AggregatorItemProviderAdapterFactory.java index c9ec616e2..808f5c975 100644 --- a/plugins/org.eclipse.cbi.p2repo.aggregator.edit/src/org/eclipse/cbi/p2repo/aggregator/provider/AggregatorItemProviderAdapterFactory.java +++ b/plugins/org.eclipse.cbi.p2repo.aggregator.edit/src/org/eclipse/cbi/p2repo/aggregator/provider/AggregatorItemProviderAdapterFactory.java @@ -476,6 +476,31 @@ public Adapter createMappedRepositoryAdapter() { return mappedRepositoryItemProvider; } + /** + * This keeps track of the one adapter used for all {@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyItem} instances. + * + * + * @since 1.1.0 + * @generated + */ + protected MavenDependencyItemItemProvider mavenDependencyItemItemProvider; + + /** + * This creates an adapter for a {@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyItem}. + * + * + * @since 1.1.0 + * @generated + */ + @Override + public Adapter createMavenDependencyItemAdapter() { + if (mavenDependencyItemItemProvider == null) { + mavenDependencyItemItemProvider = new MavenDependencyItemItemProvider(this); + } + + return mavenDependencyItemItemProvider; + } + /** * This creates an adapter for a {@link org.eclipse.cbi.p2repo.aggregator.MavenItem}. * @@ -506,6 +531,31 @@ public Adapter createMavenMappingAdapter() { return mavenMappingItemProvider; } + /** + * This keeps track of the one adapter used for all {@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping} instances. + * + * + * @since 1.1.0 + * @generated + */ + protected MavenDependencyMappingItemProvider mavenDependencyMappingItemProvider; + + /** + * This creates an adapter for a {@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping}. + * + * + * @since 1.1.0 + * @generated + */ + @Override + public Adapter createMavenDependencyMappingAdapter() { + if (mavenDependencyMappingItemProvider == null) { + mavenDependencyMappingItemProvider = new MavenDependencyMappingItemProvider(this); + } + + return mavenDependencyMappingItemProvider; + } + /** * This creates an adapter for a {@link org.eclipse.cbi.p2repo.aggregator.MetadataRepositoryReference}. * @@ -615,10 +665,14 @@ public void dispose() { exclusionRuleItemProvider.dispose(); if (mappedRepositoryItemProvider != null) mappedRepositoryItemProvider.dispose(); + if (mavenDependencyItemItemProvider != null) + mavenDependencyItemItemProvider.dispose(); if (mavenItemItemProvider != null) mavenItemItemProvider.dispose(); if (mavenMappingItemProvider != null) mavenMappingItemProvider.dispose(); + if (mavenDependencyMappingItemProvider != null) + mavenDependencyMappingItemProvider.dispose(); if (metadataRepositoryReferenceItemProvider != null) metadataRepositoryReferenceItemProvider.dispose(); if (productItemProvider != null) diff --git a/plugins/org.eclipse.cbi.p2repo.aggregator.edit/src/org/eclipse/cbi/p2repo/aggregator/provider/ContributionItemProvider.java b/plugins/org.eclipse.cbi.p2repo.aggregator.edit/src/org/eclipse/cbi/p2repo/aggregator/provider/ContributionItemProvider.java index 271bc3492..a1d8c78fa 100644 --- a/plugins/org.eclipse.cbi.p2repo.aggregator.edit/src/org/eclipse/cbi/p2repo/aggregator/provider/ContributionItemProvider.java +++ b/plugins/org.eclipse.cbi.p2repo.aggregator.edit/src/org/eclipse/cbi/p2repo/aggregator/provider/ContributionItemProvider.java @@ -17,6 +17,7 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.function.BiFunction; import org.eclipse.cbi.p2repo.aggregator.Aggregation; import org.eclipse.cbi.p2repo.aggregator.AggregatorFactory; @@ -27,6 +28,7 @@ import org.eclipse.cbi.p2repo.aggregator.Feature; import org.eclipse.cbi.p2repo.aggregator.MappedRepository; import org.eclipse.cbi.p2repo.aggregator.MappedUnit; +import org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping; import org.eclipse.cbi.p2repo.aggregator.MavenMapping; import org.eclipse.cbi.p2repo.aggregator.ValidationSet; import org.eclipse.cbi.p2repo.aggregator.p2view.IUPresentation; @@ -50,6 +52,7 @@ import org.eclipse.emf.edit.command.CommandParameter; import org.eclipse.emf.edit.command.RemoveCommand; import org.eclipse.emf.edit.domain.EditingDomain; +import org.eclipse.emf.edit.provider.AdapterFactoryItemDelegator; import org.eclipse.emf.edit.provider.ComposeableAdapterFactory; import org.eclipse.emf.edit.provider.IEditingDomainItemProvider; import org.eclipse.emf.edit.provider.IItemColorProvider; @@ -221,8 +224,7 @@ protected void addLabelPropertyDescriptor(Object object) { * * @generated */ - @Override - protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) { + private void collectNewChildDescriptorsGen(Collection newChildDescriptors, Object object) { super.collectNewChildDescriptors(newChildDescriptors, object); newChildDescriptors.add(createChildParameter(AggregatorPackage.Literals.CONTRIBUTION__REPOSITORIES, @@ -230,6 +232,67 @@ protected void collectNewChildDescriptors(Collection newChildDescriptors newChildDescriptors.add(createChildParameter(AggregatorPackage.Literals.CONTRIBUTION__MAVEN_MAPPINGS, AggregatorFactory.eINSTANCE.createMavenMapping())); + + newChildDescriptors.add(createChildParameter(AggregatorPackage.Literals.CONTRIBUTION__MAVEN_DEPENDENCY_MAPPINGS, + AggregatorFactory.eINSTANCE.createMavenDependencyMapping())); + } + + @Override + protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) { + collectNewChildDescriptorsGen(newChildDescriptors, object); + + addNewChildDescriptor(this::createChildParameter, newChildDescriptors, + AggregatorPackage.Literals.CONTRIBUTION__MAVEN_MAPPINGS, createGenericMavenMapping()); + addNewChildDescriptor(this::createChildParameter, newChildDescriptors, + AggregatorPackage.Literals.CONTRIBUTION__MAVEN_DEPENDENCY_MAPPINGS, createJavaPackageMapping()); + } + + static MavenMapping createGenericMavenMapping() { + MavenMapping mapping = AggregatorFactory.eINSTANCE.createMavenMapping(); + mapping.setNamePattern(".*"); + mapping.setGroupId("\\$maven-groupId\\$"); + mapping.setArtifactId("\\$maven-artifactId\\$"); + mapping.setVersionPattern(".*"); + mapping.setVersionTemplate("\\$maven-version\\$"); + return mapping; + } + + static MavenDependencyMapping createJavaPackageMapping() { + MavenDependencyMapping mapping = AggregatorFactory.eINSTANCE.createMavenDependencyMapping(); + mapping.setNamespacePattern("java\\.package"); + mapping.setNamePattern(".*"); + mapping.setGroupId("*"); + mapping.setArtifactId("*"); + mapping.setVersionRangePattern(".*"); + return mapping; + } + + static void addNewChildDescriptor(BiFunction childParameterCreator, + Collection newChildDescriptors, EReference eReference, Object child) { + ArrayList result = new ArrayList<>(newChildDescriptors); + Object childDescriptor = childParameterCreator.apply(eReference, child); + int index = 0; + for (int i = 0; i < result.size(); i++) { + Object object = result.get(i); + if (object instanceof CommandParameter) { + CommandParameter commandParameter = (CommandParameter) object; + if (commandParameter.getEStructuralFeature() == eReference) { + index = i; + } + } + } + + result.add(index + 1, childDescriptor); + newChildDescriptors.clear(); + newChildDescriptors.addAll(result); + } + + @Override + public String getCreateChildText(Object owner, Object feature, Object child, Collection selection) { + if (child instanceof MavenDependencyMapping || child instanceof MavenMapping) { + return new AdapterFactoryItemDelegator(getRootAdapterFactory()).getText(child); + } + return super.getCreateChildText(owner, feature, child, selection); } @SuppressWarnings("unchecked") @@ -353,6 +416,7 @@ public Collection getChildrenFeatures(Object objec super.getChildrenFeatures(object); childrenFeatures.add(AggregatorPackage.Literals.CONTRIBUTION__REPOSITORIES); childrenFeatures.add(AggregatorPackage.Literals.CONTRIBUTION__MAVEN_MAPPINGS); + childrenFeatures.add(AggregatorPackage.Literals.CONTRIBUTION__MAVEN_DEPENDENCY_MAPPINGS); } return childrenFeatures; } @@ -581,6 +645,7 @@ public void notifyChangedGen(Notification notification) { return; case AggregatorPackage.CONTRIBUTION__REPOSITORIES: case AggregatorPackage.CONTRIBUTION__MAVEN_MAPPINGS: + case AggregatorPackage.CONTRIBUTION__MAVEN_DEPENDENCY_MAPPINGS: fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false)); return; } diff --git a/plugins/org.eclipse.cbi.p2repo.aggregator.edit/src/org/eclipse/cbi/p2repo/aggregator/provider/MavenDependencyItemItemProvider.java b/plugins/org.eclipse.cbi.p2repo.aggregator.edit/src/org/eclipse/cbi/p2repo/aggregator/provider/MavenDependencyItemItemProvider.java new file mode 100644 index 000000000..e10432349 --- /dev/null +++ b/plugins/org.eclipse.cbi.p2repo.aggregator.edit/src/org/eclipse/cbi/p2repo/aggregator/provider/MavenDependencyItemItemProvider.java @@ -0,0 +1,214 @@ +/** + * Copyright (c) 2022 Eclipse Foundation and others. + * + * 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 + */ +package org.eclipse.cbi.p2repo.aggregator.provider; + +import java.util.Collection; +import java.util.List; + +import org.eclipse.cbi.p2repo.aggregator.AggregatorPackage; +import org.eclipse.cbi.p2repo.aggregator.MavenDependencyItem; +import org.eclipse.emf.common.notify.AdapterFactory; +import org.eclipse.emf.common.notify.Notification; +import org.eclipse.emf.common.util.ResourceLocator; +import org.eclipse.emf.edit.provider.ComposeableAdapterFactory; +import org.eclipse.emf.edit.provider.IEditingDomainItemProvider; +import org.eclipse.emf.edit.provider.IItemColorProvider; +import org.eclipse.emf.edit.provider.IItemFontProvider; +import org.eclipse.emf.edit.provider.IItemLabelProvider; +import org.eclipse.emf.edit.provider.IItemPropertyDescriptor; +import org.eclipse.emf.edit.provider.IItemPropertySource; +import org.eclipse.emf.edit.provider.IStructuredItemContentProvider; +import org.eclipse.emf.edit.provider.ITreeItemContentProvider; +import org.eclipse.emf.edit.provider.ItemPropertyDescriptor; +import org.eclipse.emf.edit.provider.ViewerNotification; + +/** + * This is the item provider adapter for a {@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyItem} object. + * + * + * @since 1.1.0 + * @generated + */ +public class MavenDependencyItemItemProvider extends AggregatorItemProviderAdapter + implements IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, + IItemLabelProvider, IItemPropertySource, IItemColorProvider, IItemFontProvider { + /** + * This constructs an instance from a factory and a notifier. + * + * + * @generated + */ + public MavenDependencyItemItemProvider(AdapterFactory adapterFactory) { + super(adapterFactory); + } + + /** + * This returns the property descriptors for the adapted class. + * + * + * @generated + */ + @Override + public List getPropertyDescriptors(Object object) { + if (itemPropertyDescriptors == null) { + super.getPropertyDescriptors(object); + + addGroupIdPropertyDescriptor(object); + addArtifactIdPropertyDescriptor(object); + addMappedVersionRangePropertyDescriptor(object); + addMavenDependencyMappingPropertyDescriptor(object); + } + return itemPropertyDescriptors; + } + + /** + * This adds a property descriptor for the Group Id feature. + * + * + * @generated + */ + protected void addGroupIdPropertyDescriptor(Object object) { + itemPropertyDescriptors.add(createItemPropertyDescriptor( + ((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(), getResourceLocator(), + getString("_UI_MavenDependencyItem_groupId_feature"), + getString("_UI_PropertyDescriptor_description", "_UI_MavenDependencyItem_groupId_feature", + "_UI_MavenDependencyItem_type"), + AggregatorPackage.Literals.MAVEN_DEPENDENCY_ITEM__GROUP_ID, true, false, false, + ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null)); + } + + /** + * This adds a property descriptor for the Artifact Id feature. + * + * + * @generated + */ + protected void addArtifactIdPropertyDescriptor(Object object) { + itemPropertyDescriptors.add(createItemPropertyDescriptor( + ((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(), getResourceLocator(), + getString("_UI_MavenDependencyItem_artifactId_feature"), + getString("_UI_PropertyDescriptor_description", "_UI_MavenDependencyItem_artifactId_feature", + "_UI_MavenDependencyItem_type"), + AggregatorPackage.Literals.MAVEN_DEPENDENCY_ITEM__ARTIFACT_ID, true, false, false, + ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null)); + } + + /** + * This adds a property descriptor for the Mapped Version Range feature. + * + * + * @generated + */ + protected void addMappedVersionRangePropertyDescriptor(Object object) { + itemPropertyDescriptors + .add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(), + getResourceLocator(), getString("_UI_MavenDependencyItem_mappedVersionRange_feature"), + getString("_UI_PropertyDescriptor_description", + "_UI_MavenDependencyItem_mappedVersionRange_feature", "_UI_MavenDependencyItem_type"), + AggregatorPackage.Literals.MAVEN_DEPENDENCY_ITEM__MAPPED_VERSION_RANGE, true, false, false, + ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null)); + } + + /** + * This adds a property descriptor for the Maven Dependency Mapping feature. + * + * + * @generated + */ + protected void addMavenDependencyMappingPropertyDescriptor(Object object) { + itemPropertyDescriptors.add(createItemPropertyDescriptor( + ((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(), getResourceLocator(), + getString("_UI_MavenDependencyItem_mavenDependencyMapping_feature"), + getString("_UI_PropertyDescriptor_description", + "_UI_MavenDependencyItem_mavenDependencyMapping_feature", "_UI_MavenDependencyItem_type"), + AggregatorPackage.Literals.MAVEN_DEPENDENCY_ITEM__MAVEN_DEPENDENCY_MAPPING, true, false, true, null, + null, null)); + } + + /** + * This returns MavenDependencyItem.gif. + * + * + * @generated + */ + @Override + public Object getImage(Object object) { + return overlayImage(object, getResourceLocator().getImage("full/obj16/MavenDependencyItem")); + } + + /** + * + * + * @generated + */ + @Override + protected boolean shouldComposeCreationImage() { + return true; + } + + /** + * This returns the label text for the adapted class. + * + * + * @generated + */ + @Override + public String getText(Object object) { + String label = ((MavenDependencyItem) object).getGroupId(); + return label == null || label.length() == 0 ? getString("_UI_MavenDependencyItem_type") + : getString("_UI_MavenDependencyItem_type") + " " + label; + } + + /** + * This handles model notifications by calling {@link #updateChildren} to update any cached + * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}. + * + * + * @generated + */ + @Override + public void notifyChanged(Notification notification) { + updateChildren(notification); + + switch (notification.getFeatureID(MavenDependencyItem.class)) { + case AggregatorPackage.MAVEN_DEPENDENCY_ITEM__GROUP_ID: + case AggregatorPackage.MAVEN_DEPENDENCY_ITEM__ARTIFACT_ID: + case AggregatorPackage.MAVEN_DEPENDENCY_ITEM__MAPPED_VERSION_RANGE: + fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true)); + return; + } + super.notifyChanged(notification); + } + + /** + * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children + * that can be created under this object. + * + * + * @generated + */ + @Override + protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) { + super.collectNewChildDescriptors(newChildDescriptors, object); + } + + /** + * Return the resource locator for this item provider's resources. + * + * + * @generated + */ + @Override + public ResourceLocator getResourceLocator() { + return AggregatorEditPlugin.INSTANCE; + } + +} diff --git a/plugins/org.eclipse.cbi.p2repo.aggregator.edit/src/org/eclipse/cbi/p2repo/aggregator/provider/MavenDependencyMappingItemProvider.java b/plugins/org.eclipse.cbi.p2repo.aggregator.edit/src/org/eclipse/cbi/p2repo/aggregator/provider/MavenDependencyMappingItemProvider.java new file mode 100644 index 000000000..3d1468967 --- /dev/null +++ b/plugins/org.eclipse.cbi.p2repo.aggregator.edit/src/org/eclipse/cbi/p2repo/aggregator/provider/MavenDependencyMappingItemProvider.java @@ -0,0 +1,306 @@ +/** + * Copyright (c) 2022 Eclipse Foundation and others. + * + * 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 + */ +package org.eclipse.cbi.p2repo.aggregator.provider; + +import java.util.Collection; +import java.util.List; + +import org.eclipse.cbi.p2repo.aggregator.AggregatorPackage; +import org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping; +import org.eclipse.cbi.p2repo.util.StringUtils; +import org.eclipse.emf.common.notify.AdapterFactory; +import org.eclipse.emf.common.notify.Notification; +import org.eclipse.emf.common.util.ResourceLocator; +import org.eclipse.emf.edit.provider.ComposeableAdapterFactory; +import org.eclipse.emf.edit.provider.IEditingDomainItemProvider; +import org.eclipse.emf.edit.provider.IItemColorProvider; +import org.eclipse.emf.edit.provider.IItemFontProvider; +import org.eclipse.emf.edit.provider.IItemLabelProvider; +import org.eclipse.emf.edit.provider.IItemPropertyDescriptor; +import org.eclipse.emf.edit.provider.IItemPropertySource; +import org.eclipse.emf.edit.provider.IStructuredItemContentProvider; +import org.eclipse.emf.edit.provider.ITreeItemContentProvider; +import org.eclipse.emf.edit.provider.ItemPropertyDescriptor; +import org.eclipse.emf.edit.provider.ViewerNotification; + +/** + * This is the item provider adapter for a {@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping} object. + * + * + * @since 1.1.0 + * @generated + */ +public class MavenDependencyMappingItemProvider extends AggregatorItemProviderAdapter + implements IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, + IItemLabelProvider, IItemPropertySource, IItemColorProvider, IItemFontProvider { + /** + * This constructs an instance from a factory and a notifier. + * + * + * @generated + */ + public MavenDependencyMappingItemProvider(AdapterFactory adapterFactory) { + super(adapterFactory); + } + + /** + * This returns the property descriptors for the adapted class. + * + * + * @generated + */ + @Override + public List getPropertyDescriptors(Object object) { + if (itemPropertyDescriptors == null) { + super.getPropertyDescriptors(object); + + addIuNamePatternPropertyDescriptor(object); + addNamespacePatternPropertyDescriptor(object); + addNamePatternPropertyDescriptor(object); + addGroupIdPropertyDescriptor(object); + addArtifactIdPropertyDescriptor(object); + addVersionRangePatternPropertyDescriptor(object); + addVersionRangeTemplatePropertyDescriptor(object); + } + return itemPropertyDescriptors; + } + + /** + * This adds a property descriptor for the Iu Name Pattern feature. + * + * + * @generated + */ + protected void addIuNamePatternPropertyDescriptor(Object object) { + itemPropertyDescriptors + .add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(), + getResourceLocator(), getString("_UI_MavenDependencyMapping_iuNamePattern_feature"), + getString("_UI_PropertyDescriptor_description", + "_UI_MavenDependencyMapping_iuNamePattern_feature", "_UI_MavenDependencyMapping_type"), + AggregatorPackage.Literals.MAVEN_DEPENDENCY_MAPPING__IU_NAME_PATTERN, true, false, false, + ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null)); + } + + /** + * This adds a property descriptor for the Namespace Pattern feature. + * + * + * @generated + */ + protected void addNamespacePatternPropertyDescriptor(Object object) { + itemPropertyDescriptors.add(createItemPropertyDescriptor( + ((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(), getResourceLocator(), + getString("_UI_MavenDependencyMapping_namespacePattern_feature"), + getString("_UI_PropertyDescriptor_description", "_UI_MavenDependencyMapping_namespacePattern_feature", + "_UI_MavenDependencyMapping_type"), + AggregatorPackage.Literals.MAVEN_DEPENDENCY_MAPPING__NAMESPACE_PATTERN, true, false, false, + ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null)); + } + + /** + * This adds a property descriptor for the Name Pattern feature. + * + * + * @generated + */ + protected void addNamePatternPropertyDescriptor(Object object) { + itemPropertyDescriptors + .add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(), + getResourceLocator(), getString("_UI_MavenDependencyMapping_namePattern_feature"), + getString("_UI_PropertyDescriptor_description", + "_UI_MavenDependencyMapping_namePattern_feature", "_UI_MavenDependencyMapping_type"), + AggregatorPackage.Literals.MAVEN_DEPENDENCY_MAPPING__NAME_PATTERN, true, false, false, + ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null)); + } + + /** + * This adds a property descriptor for the Group Id feature. + * + * + * @generated + */ + protected void addGroupIdPropertyDescriptor(Object object) { + itemPropertyDescriptors + .add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(), + getResourceLocator(), getString("_UI_MavenDependencyMapping_groupId_feature"), + getString("_UI_PropertyDescriptor_description", "_UI_MavenDependencyMapping_groupId_feature", + "_UI_MavenDependencyMapping_type"), + AggregatorPackage.Literals.MAVEN_DEPENDENCY_MAPPING__GROUP_ID, true, false, false, + ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null)); + } + + /** + * This adds a property descriptor for the Artifact Id feature. + * + * + * @generated + */ + protected void addArtifactIdPropertyDescriptor(Object object) { + itemPropertyDescriptors + .add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(), + getResourceLocator(), getString("_UI_MavenDependencyMapping_artifactId_feature"), + getString("_UI_PropertyDescriptor_description", "_UI_MavenDependencyMapping_artifactId_feature", + "_UI_MavenDependencyMapping_type"), + AggregatorPackage.Literals.MAVEN_DEPENDENCY_MAPPING__ARTIFACT_ID, true, false, false, + ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null)); + } + + /** + * This adds a property descriptor for the Version Range Pattern feature. + * + * + * @generated + */ + protected void addVersionRangePatternPropertyDescriptor(Object object) { + itemPropertyDescriptors.add(createItemPropertyDescriptor( + ((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(), getResourceLocator(), + getString("_UI_MavenDependencyMapping_versionRangePattern_feature"), + getString("_UI_PropertyDescriptor_description", + "_UI_MavenDependencyMapping_versionRangePattern_feature", "_UI_MavenDependencyMapping_type"), + AggregatorPackage.Literals.MAVEN_DEPENDENCY_MAPPING__VERSION_RANGE_PATTERN, true, false, false, + ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null)); + } + + /** + * This adds a property descriptor for the Version Range Template feature. + * + * + * @generated + */ + protected void addVersionRangeTemplatePropertyDescriptor(Object object) { + itemPropertyDescriptors.add(createItemPropertyDescriptor( + ((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(), getResourceLocator(), + getString("_UI_MavenDependencyMapping_versionRangeTemplate_feature"), + getString("_UI_PropertyDescriptor_description", + "_UI_MavenDependencyMapping_versionRangeTemplate_feature", "_UI_MavenDependencyMapping_type"), + AggregatorPackage.Literals.MAVEN_DEPENDENCY_MAPPING__VERSION_RANGE_TEMPLATE, true, false, false, + ItemPropertyDescriptor.GENERIC_VALUE_IMAGE, null, null)); + } + + /** + * This returns MavenDependencyMapping.gif. + * + * + * @generated + */ + @Override + public Object getImage(Object object) { + return overlayImage(object, getResourceLocator().getImage("full/obj16/MavenDependencyMapping")); + } + + /** + * + * + * @generated + */ + @Override + protected boolean shouldComposeCreationImage() { + return true; + } + + /** + * This returns the label text for the adapted class. + * + * + * @generated NOT + */ + @Override + public String getText(Object object) { + MavenDependencyMapping mapping = (MavenDependencyMapping) object; + StringBuilder result = new StringBuilder(getString("_UI_MavenDependencyMapping_type")).append(" : ['"); + String iuNamePattern = StringUtils.trimmedOrNull(mapping.getIuNamePattern()); + if (iuNamePattern != null) { + result.append(iuNamePattern).append("' ~ '"); + } + + String namespacePattern = mapping.getNamespacePattern(); + + if (namespacePattern != null) { + result.append(namespacePattern).append("' : '"); + } + + String namePattern = mapping.getNamePattern(); + if (namePattern != null) { + result.append(namePattern); + } + + result.append("' => '"); + String groupId = mapping.getGroupId(); + if (groupId != null) { + result.append(groupId); + } + + String artifactId = mapping.getArtifactId(); + if (artifactId != null) { + result.append('/'); + result.append(artifactId); + } + + String versionRangePattern = mapping.getVersionRangePattern(); + String versionRangeTemplate = mapping.getVersionRangeTemplate(); + if (versionRangePattern != null) { + result.append("', '").append(versionRangePattern); + result.append("' => '").append(versionRangeTemplate == null ? "" : versionRangeTemplate); + } + result.append("']"); + return result.toString(); + } + + /** + * This handles model notifications by calling {@link #updateChildren} to update any cached + * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}. + * + * + * @generated + */ + @Override + public void notifyChanged(Notification notification) { + updateChildren(notification); + + switch (notification.getFeatureID(MavenDependencyMapping.class)) { + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__STATUS: + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__IU_NAME_PATTERN: + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__NAMESPACE_PATTERN: + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__NAME_PATTERN: + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__GROUP_ID: + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__ARTIFACT_ID: + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__VERSION_RANGE_PATTERN: + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__VERSION_RANGE_TEMPLATE: + fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true)); + return; + } + super.notifyChanged(notification); + } + + /** + * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children + * that can be created under this object. + * + * + * @generated + */ + @Override + protected void collectNewChildDescriptors(Collection newChildDescriptors, Object object) { + super.collectNewChildDescriptors(newChildDescriptors, object); + } + + /** + * Return the resource locator for this item provider's resources. + * + * + * @generated + */ + @Override + public ResourceLocator getResourceLocator() { + return AggregatorEditPlugin.INSTANCE; + } + +} diff --git a/plugins/org.eclipse.cbi.p2repo.aggregator.edit/src/org/eclipse/cbi/p2repo/aggregator/provider/MavenMappingItemProvider.java b/plugins/org.eclipse.cbi.p2repo.aggregator.edit/src/org/eclipse/cbi/p2repo/aggregator/provider/MavenMappingItemProvider.java index c3e476b88..de7ec31e4 100644 --- a/plugins/org.eclipse.cbi.p2repo.aggregator.edit/src/org/eclipse/cbi/p2repo/aggregator/provider/MavenMappingItemProvider.java +++ b/plugins/org.eclipse.cbi.p2repo.aggregator.edit/src/org/eclipse/cbi/p2repo/aggregator/provider/MavenMappingItemProvider.java @@ -15,6 +15,7 @@ import org.eclipse.cbi.p2repo.aggregator.AggregatorPackage; import org.eclipse.cbi.p2repo.aggregator.MavenMapping; +import org.eclipse.cbi.p2repo.aggregator.util.GeneralUtils; import org.eclipse.emf.common.notify.AdapterFactory; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.util.ResourceLocator; @@ -218,28 +219,8 @@ public ResourceLocator getResourceLocator() { */ @Override public String getText(Object object) { - MavenMapping self = (MavenMapping) object; - StringBuilder bld = new StringBuilder(getString("_UI_MavenMapping_type")).append(" : ['"); - String namePattern = self.getNamePattern(); - if (namePattern != null) - bld.append(namePattern); - bld.append("' => '"); - String groupId = self.getGroupId(); - if (groupId != null) - bld.append(groupId); - String artifactId = self.getArtifactId(); - if (artifactId != null) { - bld.append('/'); - bld.append(artifactId); - } - String versionPattern = self.getVersionPattern(); - String versionTemplate = self.getVersionTemplate(); - if (versionPattern != null && versionTemplate != null) { - bld.append("', '").append(versionPattern); - bld.append("' => '").append(versionTemplate); - } - bld.append("']"); - return bld.toString(); + MavenMapping mapping = (MavenMapping) object; + return getString("_UI_MavenMapping_type") + " : ['" + GeneralUtils.toString(mapping) + ']'; } @Override diff --git a/plugins/org.eclipse.cbi.p2repo.aggregator.engine.maven/src/org/eclipse/cbi/p2repo/aggregator/engine/maven/InstallableUnitMapping.java b/plugins/org.eclipse.cbi.p2repo.aggregator.engine.maven/src/org/eclipse/cbi/p2repo/aggregator/engine/maven/InstallableUnitMapping.java index e537b375f..d465ecd8a 100644 --- a/plugins/org.eclipse.cbi.p2repo.aggregator.engine.maven/src/org/eclipse/cbi/p2repo/aggregator/engine/maven/InstallableUnitMapping.java +++ b/plugins/org.eclipse.cbi.p2repo.aggregator.engine.maven/src/org/eclipse/cbi/p2repo/aggregator/engine/maven/InstallableUnitMapping.java @@ -12,34 +12,43 @@ package org.eclipse.cbi.p2repo.aggregator.engine.maven; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; -import java.util.Objects; import java.util.Optional; import java.util.Set; -import java.util.stream.Collectors; +import java.util.function.Consumer; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import org.apache.maven.model.Dependency; +import org.apache.maven.model.InputLocation; +import org.apache.maven.model.License; import org.apache.maven.model.Model; import org.apache.maven.model.Parent; import org.eclipse.cbi.p2repo.aggregator.Aggregation; import org.eclipse.cbi.p2repo.aggregator.AggregatorFactory; import org.eclipse.cbi.p2repo.aggregator.Architecture; import org.eclipse.cbi.p2repo.aggregator.Contribution; +import org.eclipse.cbi.p2repo.aggregator.MavenDependencyItem; +import org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping; import org.eclipse.cbi.p2repo.aggregator.MavenItem; import org.eclipse.cbi.p2repo.aggregator.MavenMapping; import org.eclipse.cbi.p2repo.aggregator.OperatingSystem; import org.eclipse.cbi.p2repo.aggregator.StatusCode; import org.eclipse.cbi.p2repo.aggregator.VersionFormat; import org.eclipse.cbi.p2repo.aggregator.WindowSystem; +import org.eclipse.cbi.p2repo.aggregator.util.GeneralUtils; import org.eclipse.cbi.p2repo.aggregator.util.InstallableUnitUtils; import org.eclipse.cbi.p2repo.p2.maven.util.VersionUtil; import org.eclipse.cbi.p2repo.util.LogUtils; import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.emf.ecore.EObject; import org.eclipse.equinox.internal.p2.metadata.IRequiredCapability; import org.eclipse.equinox.internal.p2.metadata.InstallableUnit; @@ -58,6 +67,9 @@ import org.eclipse.equinox.p2.metadata.VersionRange; import org.eclipse.equinox.p2.metadata.expression.IFilterExpression; import org.eclipse.equinox.p2.metadata.expression.IMatchExpression; +import org.eclipse.equinox.p2.query.IQueryResult; +import org.eclipse.equinox.p2.query.IQueryable; +import org.eclipse.equinox.p2.query.QueryUtil; /** * @author Filip Hrbek (filip.hrbek@cloudsmith.com) @@ -71,6 +83,8 @@ public enum Type { TOP, GROUP, IU, PROXY; } + private static final Pattern IU_PROPERTY_SUBSTITUTION_PATTERN = Pattern.compile("\\$(.*)\\$"); + private static final String GENERIC_PLATFORM_SUFFIX = ".${osgi.platform}"; private static final Set KNOWN_OSGI_WS, KNOWN_OSGI_OS, KNOWN_OSGI_ARCH; @@ -97,8 +111,12 @@ public enum Type { private List mappings; + private List dependencyMappings; + private MavenItem mapped; + private Set usedMavenMappings = new LinkedHashSet(); + private InstallableUnitMapping parent; private List children = new ArrayList(); @@ -117,19 +135,47 @@ public enum Type { private boolean hasSources; - private Collection allIUMapping; + private IQueryable index; + + private Set aggregatedIUs; public InstallableUnitMapping(Contribution contribution, IInstallableUnit iu, List mappings, - Collection allIUMapping) { + List dependencyMappings, IQueryable index, + Set aggregatedIUs) { this.contribution = contribution; - this.allIUMapping = allIUMapping; + this.index = index; + this.aggregatedIUs = aggregatedIUs; this.mappings = new ArrayList(mappings.size() + 1); this.mappings.addAll(mappings); + this.mappings.add(MavenMapping.DEFAULT_MAPPING); + + this.dependencyMappings = new ArrayList(dependencyMappings.size() + 2); + this.dependencyMappings.addAll(dependencyMappings); + + MavenDependencyMapping defaultDependencyMapping = AggregatorFactory.eINSTANCE.createMavenDependencyMapping(); + defaultDependencyMapping.setNamespacePattern("org\\.eclipse\\.equinox\\.p2\\.iu|osgi\\.bundle"); + defaultDependencyMapping.setNamePattern(".*"); + defaultDependencyMapping.setGroupId("*"); + defaultDependencyMapping.setArtifactId("*"); + defaultDependencyMapping.setVersionRangePattern("(.*)"); + defaultDependencyMapping.setVersionRangeTemplate("$1"); + this.dependencyMappings.add(defaultDependencyMapping); + + MavenDependencyMapping terminalDependencyMapping = AggregatorFactory.eINSTANCE.createMavenDependencyMapping(); + terminalDependencyMapping.setNamespacePattern(".*"); + terminalDependencyMapping.setNamePattern(".*"); + terminalDependencyMapping.setGroupId("!"); + terminalDependencyMapping.setArtifactId("!"); + this.dependencyMappings.add(terminalDependencyMapping); for (MavenMapping mapping : mappings) if (mapping.getStatus().getCode() != StatusCode.OK) throw new RuntimeException("Invalid maven mapping: " + mapping.toString()); + for (MavenDependencyMapping mapping : dependencyMappings) + if (mapping.getStatus().getCode() != StatusCode.OK) + throw new RuntimeException("Invalid maven dependency mapping: " + mapping.toString()); + switch (iu.getArtifacts().size()) { case 1: mainArtifact = iu.getArtifacts().iterator().next(); @@ -151,7 +197,8 @@ public InstallableUnitMapping(Contribution contribution, IInstallableUnit iu, Li sibling.overrideId(genId); sibling.overrideArtifacts(Collections.singletonList(artifact)); - siblings.add(new InstallableUnitMapping(contribution, sibling, List.of(), allIUMapping)); + siblings.add(new InstallableUnitMapping(contribution, sibling, List.of(), List.of(), index, + aggregatedIUs)); } proxy.overrideRequirements(dependencies); @@ -186,7 +233,9 @@ public InstallableUnitMapping(VersionFormat versionFormat) { this.versionFormat = versionFormat; } - public org.apache.maven.model.Model asPOM() throws CoreException { + static final Set namespaces = new HashSet(); + + public Model asPOM() { Model pom = new Model(); if (parent != null && !parent.isTransient()) { Parent newParent = new Parent(); @@ -196,8 +245,11 @@ public org.apache.maven.model.Model asPOM() throws CoreException { pom.setParent(newParent); } pom.setModelVersion("4.0"); - pom.setGroupId(map().getGroupId()); - pom.setArtifactId(map().getArtifactId()); + MavenItem mavenItem = map(); + String thisGroupId = mavenItem.getGroupId(); + pom.setGroupId(thisGroupId); + String thisArtifactId = mavenItem.getArtifactId(); + pom.setArtifactId(thisArtifactId); if (getMainArtifact() == null) { pom.setPackaging("pom"); } @@ -206,73 +258,107 @@ public org.apache.maven.model.Model asPOM() throws CoreException { pom.setVersion(getVersionString(false, -1)); } - boolean hasPlatformFragmentDependency[] = { false }; - pom.setDependencies(getRequirements().stream() // - .filter(IRequiredCapability.class::isInstance) // - .map(IRequiredCapability.class::cast) // - // only consider require-bundle so far - .filter(req -> IInstallableUnit.NAMESPACE_IU_ID.equals(req.getNamespace()) - || "osgi.bundle".equals(req.getNamespace())) - .map(req -> { - Dependency dependency = new Dependency(); - MavenItem dependencyMapping = resolveMapping(req).mapped; - dependency.setGroupId(dependencyMapping.getGroupId()); + Set dependencies = new HashSet(); + List myRequirements = new ArrayList<>(installableUnit.getRequirements()); + Collection requirements = getRequirements(); + List result = new ArrayList<>(); + for (IRequirement requirement : requirements) { + if (requirement.getMax() != 0 && requirement instanceof IRequiredCapability) { + IRequiredCapability req = (IRequiredCapability) requirement; + + MavenDependencyItem dependencyItem = mapRequirement(req); + String dependecyItemGroupId = dependencyItem.getGroupId(); + if ("!".equals(dependecyItemGroupId)) { + continue; + } + + InputLocation inputLocation = new InputLocation(myRequirements.indexOf(req), 0, null); + String mappedVersionRange = trimOrNull(dependencyItem.getMappedVersionRange()); + VersionRange reqRange = mappedVersionRange == null ? null : VersionRange.create(mappedVersionRange); + + if (!"*".equals(dependecyItemGroupId)) { + String artifactId = dependencyItem.getArtifactId(); + if (dependencies.add(dependecyItemGroupId + ":" + artifactId)) { + Dependency dependency = new Dependency(); + result.add(dependency); + + dependency.setLocation("", inputLocation); + dependency.setGroupId(dependecyItemGroupId); + dependency.setArtifactId(artifactId); + if (mappedVersionRange != null) { + dependency.setVersion(mappedVersionRange); + } else { + dependency.setVersion("[0.0,)"); + } + dependency.setOptional(req.getMin() == 0); + } + continue; + } + + Collection dependencyMappings = map(mavenItem, req); + for (MavenItem dependencyMapping : dependencyMappings) { + String groupId = dependencyMapping.getGroupId(); String artifactId = dependencyMapping.getArtifactId(); String generifiedId = generifyPlatformDependency(artifactId, req.getFilter()); if (generifiedId != null) { - if (hasPlatformFragmentDependency[0]) { - return null; // don't add again - } - hasPlatformFragmentDependency[0] = true; artifactId = generifiedId; } + + if (!dependencies.add(groupId + ":" + artifactId)) { + continue; + } + + Dependency dependency = new Dependency(); + dependency.setLocation("", inputLocation); + dependency.setGroupId(groupId); dependency.setArtifactId(artifactId); - if (req.getRange() != null && !req.getRange().equals(VersionRange.emptyRange)) { + + if (reqRange != null && !reqRange.equals(VersionRange.emptyRange)) { StringBuilder versionRangeString = new StringBuilder(); - Version low = req.getRange().getMinimum(); - Version high = req.getRange().getMaximum(); - if (req.getRange().getIncludeMinimum() && Version.MAX_VERSION.equals(high)) { - versionRangeString.append("[").append(getVersionStringForDependency(dependencyMapping, low)) - .append(",)"); + Version low = reqRange.getMinimum(); + Version high = reqRange.getMaximum(); + String lowDependencyVersion = getVersionStringForDependency(dependencyMapping, low); + if (reqRange.getIncludeMinimum() && Version.MAX_VERSION.equals(high)) { + versionRangeString.append("[").append(lowDependencyVersion).append(",)"); } else { - versionRangeString.append(req.getRange().getIncludeMinimum() ? '[' : '('); - versionRangeString.append(getVersionStringForDependency(dependencyMapping, low)); - versionRangeString.append(','); - versionRangeString.append(getVersionStringForDependency(dependencyMapping, high)); - versionRangeString.append(req.getRange().getIncludeMaximum() ? ']' : ')'); + versionRangeString.append(reqRange.getIncludeMinimum() ? '[' : '('); + versionRangeString.append(lowDependencyVersion); + String highDependencyVersion = getVersionStringForDependency(dependencyMapping, high); + if (!lowDependencyVersion.equals(highDependencyVersion)) { + versionRangeString.append(','); + versionRangeString.append(highDependencyVersion); + } + versionRangeString.append(reqRange.getIncludeMaximum() ? ']' : ')'); } - dependency.setVersion(versionRangeString.toString()); } else { dependency.setVersion("[0.0,)"); } - dependency.setOptional(req.getMin() == 0); - return dependency; - }).filter(Objects::nonNull) // - .collect(Collectors.toList())); - Map iuProperties = new HashMap(installableUnit.getProperties()); - String name = extractProperty(iuProperties, IInstallableUnit.PROP_NAME); - String description = extractProperty(iuProperties, IInstallableUnit.PROP_DESCRIPTION); + dependency.setOptional(req.getMin() == 0); - if (name != null || description != null) { - if (name != null) { - if (description != null) { - name = name + "\n\n"; + result.add(dependency); } - } else - name = ""; + } + } - if (description == null) - description = ""; + pom.setDependencies(result); - pom.setDescription(name + description); + Map iuProperties = new HashMap(installableUnit.getProperties()); + String name = extractProperty(iuProperties, IInstallableUnit.PROP_NAME); + if (name != null && !name.isBlank()) { + pom.setName(name); + } + + String description = extractProperty(iuProperties, IInstallableUnit.PROP_DESCRIPTION); + if (description != null && !description.isBlank()) { + pom.setDescription(description); } - List mavenLicenses = new ArrayList<>(); + List mavenLicenses = new ArrayList<>(); installableUnit.getLicenses().stream() // .filter(license -> license.getLocation() != null || license.getBody() != null).map(license -> { - org.apache.maven.model.License mavenLicense = new org.apache.maven.model.License(); + License mavenLicense = new License(); if (license.getLocation() != null) { mavenLicense.setUrl(license.getLocation().toString()); } @@ -300,7 +386,6 @@ public int compareTo(IInstallableUnit other) { private String extractProperty(Map iuProperties, String key) { String value = iuProperties.remove(key); - if (value != null) { if (value.startsWith("%")) { String localizedKey = "df_LT." + value.substring(1); @@ -479,13 +564,12 @@ public String getRelativePath() throws CoreException { @Override public Collection getRequirements() { if (parent != null) { - Collection myList = new ArrayList(); - Collection parentList = parent.installableUnit.getRequirements(); - for (IRequirement my : installableUnit.getRequirements()) - if (!parentList.contains(my)) - myList.add(my); - - return myList; + Collection parentRequirements = parent.installableUnit.getRequirements(); + if (!parentRequirements.isEmpty()) { + Set requirements = new LinkedHashSet(parentRequirements); + requirements.addAll(installableUnit.getRequirements()); + return requirements; + } } return installableUnit.getRequirements(); @@ -540,7 +624,7 @@ public String getVersionStringForDependency(MavenItem dependencyMapping, Version MavenMapping mavenMapping = dependencyMapping.getMavenMapping(); if (mavenMapping != null) { String mappedVersion = mavenMapping.mapVersion(dependencyVersion); - if (mappedVersion != null) + if (mappedVersion != null && !"$maven-version$".equals(mappedVersion)) return mappedVersion; } return VersionUtil.getVersionString(dependencyVersion, versionFormat, false, -1); @@ -560,62 +644,181 @@ public boolean isSourceArtifact() { // consult p2 metadata: if (!InstallableUnitUtils.isSourceBundle(this.installableUnit)) return false; - try { - // consult the mapped maven item: - return map().isSources(); - } catch (CoreException e) { - LogUtils.error(e, "Failed to map artifact {0}", getId()); - return false; - } + return map().isSources(); } public boolean isTransient() { return transientFlag; } - public MavenItem map() throws CoreException { - if (mapped != null) - return mapped; - - // first lookup defined mappings - Optional staticMapping = mappings.stream().map(mapping -> mapping.map(getId(), getVersion())) // - .filter(Objects::nonNull).findFirst(); - if (staticMapping.isPresent()) { - mapped = staticMapping.get(); - if (this.versionFormat != VersionFormat.MAVEN_SNAPSHOT) { - if (mapped.getMavenMapping().isSnapshot()) { - versionFormat = VersionFormat.MAVEN_SNAPSHOT; // override global format - } else { // fade out the following workaround? - String mappedVersion = mapped.getMappedVersion(); - if (mappedVersion != null && mappedVersion.contains(VersionUtil.DASH_SNAPSHOT)) - versionFormat = VersionFormat.MAVEN_SNAPSHOT; // override global format + public MavenItem map() { + if (mapped == null) { + mapped = mapIU(installableUnit); + } + return mapped; + } + + private MavenDependencyItem mapRequirement(IRequiredCapability requirement) { + String iuId = installableUnit.getId(); + String namespace = requirement.getNamespace(); + String name = requirement.getName(); + VersionRange range = requirement.getRange(); + for (MavenDependencyMapping mapping : dependencyMappings) { + MavenDependencyItem map = mapping.map(iuId, namespace, name, range); + if (map != null) { + return map; + } + } + + throw new IllegalStateException( + "We should never get to this point because the terminal mapping will match all requirements"); + } + + private MavenItem mapIU(IInstallableUnit iu) { + String id = iu.getId(); + Version version = iu.getVersion(); + for (MavenMapping mapping : mappings) { + MavenItem mavenItem = mapping.map(id, version); + if (mavenItem != null) { + String groupId = iu.getProperty("maven-groupId"); + String artifactId = iu.getProperty("maven-artifactId"); + if (groupId != null && groupId.equals(mapping.getGroupId()) && artifactId != null + && artifactId.equals(mavenItem.getArtifactId())) { + LogUtils.info("The mapping is identical to the p2 metadata: " + id + " => " + + GeneralUtils.toString(mapping)); + } + + if (!update(mavenItem.getArtifactId(), mavenItem::setArtifactId, iu) + || !update(mavenItem.getGroupId(), mavenItem::setGroupId, iu) + || !update(mavenItem.getMappedVersion(), mavenItem::setMappedVersion, iu)) { + continue; + } + + if (iu == installableUnit) { + if (this.versionFormat != VersionFormat.MAVEN_SNAPSHOT) { + if (mapping.isSnapshot()) { + versionFormat = VersionFormat.MAVEN_SNAPSHOT; // override global format + } else { // fade out the following workaround? + String mappedVersion = mavenItem.getMappedVersion(); + if (mappedVersion != null && mappedVersion.contains(VersionUtil.DASH_SNAPSHOT)) { + versionFormat = VersionFormat.MAVEN_SNAPSHOT; // override global format + } + } + } } + + usedMavenMappings.add(mapping); + + return mavenItem; } - return mapped; } - // TODO: lookup /META-INF/maven/pom.xml - - // read from p2 properties as generated by Tycho - String p2GroupIdProperty = installableUnit.getProperty("maven-groupId"); - String p2ArtifactIdProperty = installableUnit.getProperty("maven-artifactId"); - String p2VersionProperty = installableUnit.getProperty("maven-version"); - if (p2GroupIdProperty != null && p2ArtifactIdProperty != null) { - mapped = AggregatorFactory.eINSTANCE.createMavenItem(); - mapped.setGroupId(p2GroupIdProperty); - mapped.setArtifactId(p2ArtifactIdProperty); - mapped.setMappedVersion(p2VersionProperty); // TODO handle snapshots + throw new IllegalStateException( + "We should never get to this point because the default mapping will match all IUs"); + } + + private Set resolveMapping(IRequiredCapability requirement) { + IQueryResult result = index.query(QueryUtil.createMatchQuery(requirement.getMatches()), + new NullProgressMonitor()); + Set ius = result.toSet(); + if (ius.size() > 1) { + Set onlyAggregatedIUs = new LinkedHashSet(ius); + onlyAggregatedIUs.retainAll(aggregatedIUs); + if (!onlyAggregatedIUs.isEmpty()) { + ius = onlyAggregatedIUs; + } + + if (ius.size() > 1) { + Set ids = new HashSet(); + ius.removeIf(iu -> !ids.add(iu.getId())); + + if (ius.size() > 1) { + Optional jre = ius.stream().filter(iu -> "a.jre.javase".equals(iu.getId())) + .findFirst(); + if (jre.isPresent()) { + return Collections.singleton(jre.get()); + } + + if ("java.package".equals(requirement.getNamespace())) { + String name = requirement.getName(); + Set filteredIUs = new LinkedHashSet(ius); + // Remove each requirement that is satisfied by one of the IU's own capabilities. + filteredIUs.removeIf(iu -> { + for (IRequirement r : iu.getRequirements()) { + if (r instanceof IRequiredCapability) { + IRequiredCapability requiredCapability = (IRequiredCapability) r; + if (requiredCapability.getMin() != 0 + && "java.package".equals(requiredCapability.getNamespace()) + && name.equals(requiredCapability.getName())) { + return true; + } + } + } + return false; + }); + + if (!filteredIUs.isEmpty()) { + ius = filteredIUs; + } + } + } + } } + return ius; + } - if (mapped == null) { - mapped = MavenMapping.DEFAULT_MAPPING.map(getId(), getVersion()); + private Collection map(MavenItem containingMavenItem, IRequiredCapability requirement) { + Set ius = resolveMapping(requirement); + if (ius.isEmpty()) { + if (requirement.getMin() == 0) { + return Collections.emptyList(); + } + throw new IllegalStateException("Unresolved requirement " + requirement); } - return mapped; + + String groupId = containingMavenItem.getGroupId(); + String artifactId = containingMavenItem.getArtifactId(); + MavenItem[] mavenItems = ius.stream().map(this::mapIU) + .filter(it -> !(groupId.equals(it.getGroupId()) && artifactId.equals(it.getArtifactId())) + && !"a.jre.javase".equals(it.getArtifactId())) + .toArray(MavenItem[]::new); + + if (mavenItems.length > 1) { + StringBuilder info = new StringBuilder(); + IInstallableUnit containingIU = (IInstallableUnit) ((EObject) requirement).eContainer(); + info.append("Multiple requirement resolutions: " + containingIU.getId() + " -> " + requirement + "\n"); + for (MavenItem mavenItem : mavenItems) { + info.append(" " + mavenItem.getGroupId() + ":" + mavenItem.getArtifactId() + "\n"); + } + LogUtils.info(info.toString()); + } + + return Arrays.asList(mavenItems); + } + + private boolean update(String value, Consumer set, IInstallableUnit iu) { + if (value != null) { + String key = getPropertyKey(value); + if (key != null) { + String propertyValue = iu.getProperty(key); + if (propertyValue != null) { + set.accept(propertyValue); + } else { + return false; + } + } + } + return true; } - private InstallableUnitMapping resolveMapping(IRequiredCapability requirement) { - return allIUMapping.stream().filter(iuMapping -> requirement.isMatch(iuMapping.installableUnit)).findFirst() - .orElse(null); + private String getPropertyKey(String value) { + if (value != null) { + Matcher matcher = IU_PROPERTY_SUBSTITUTION_PATTERN.matcher(value); + if (matcher.matches()) { + return matcher.group(1); + } + } + return null; } private boolean matchesFilter(IMatchExpression filter, Map map) { @@ -667,4 +870,19 @@ public void setHasSources(boolean flag) { public boolean hasSources() { return hasSources; } + + public IInstallableUnit getGenuine() { + return installableUnit; + } + + public Set getUsedMavenMappings() { + return usedMavenMappings; + } + + @Override + public String toString() { + return "InstallableUnitMapping [installableUnit=" + + (installableUnit == null ? "null" : installableUnit.getId() + "/" + installableUnit.getVersion()) + + ", versionFormat=" + versionFormat + "]"; + } } diff --git a/plugins/org.eclipse.cbi.p2repo.aggregator.engine.maven/src/org/eclipse/cbi/p2repo/aggregator/engine/maven/MavenManager.java b/plugins/org.eclipse.cbi.p2repo.aggregator.engine.maven/src/org/eclipse/cbi/p2repo/aggregator/engine/maven/MavenManager.java index 51bd24008..89b18fe6c 100644 --- a/plugins/org.eclipse.cbi.p2repo.aggregator.engine.maven/src/org/eclipse/cbi/p2repo/aggregator/engine/maven/MavenManager.java +++ b/plugins/org.eclipse.cbi.p2repo.aggregator.engine.maven/src/org/eclipse/cbi/p2repo/aggregator/engine/maven/MavenManager.java @@ -15,6 +15,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; +import java.io.StringWriter; import java.security.MessageDigest; import java.util.ArrayList; import java.util.Arrays; @@ -24,6 +25,7 @@ import java.util.List; import java.util.Map; +import org.apache.maven.model.Model; import org.apache.maven.model.io.DefaultModelWriter; import org.eclipse.cbi.p2repo.aggregator.Aggregation; import org.eclipse.cbi.p2repo.aggregator.Contribution; @@ -217,11 +219,8 @@ private static void createCheckSum(URI fileUri, URIConverter uriConverter, Messa public static MavenRepositoryHelper createMavenStructure(List ius, Aggregation aggregation) throws CoreException { - // skip IUs without artifact, as they're not meaningful to Maven - ius = new ArrayList<>(ius); - ius.removeIf(iu -> iu.getArtifacts().isEmpty()); - List mappingRulesList = new ArrayList(); + // Initialize with standard rules for packed artifacts (which are not usable for maven anyway) mappingRulesList.add(new String[] { "(& (classifier=osgi.bundle) (format=packed))", @@ -307,7 +306,7 @@ private static void savePOMs(URI root, InstallableUnitMapping iu, URIConverter u try { new DefaultModelWriter().write(new File(java.net.URI.create(pomUri.toString())), Map.of(), iu.asPOM()); - } catch (IOException | CoreException e) { + } catch (IOException e) { throw new CoreException(new Status(IStatus.ERROR, MavenManager.class, e.getMessage(), e)); } createCheckSum(pomUri, uriConverter, digests); @@ -362,12 +361,14 @@ public static void markSiblingHasSources(InstallableUnitMapping sourcesIU, List< throws CoreException { // find the matching classifier-less sibling IU: MavenItem sourcesItem = sourcesIU.map(); + String artifactId = sourcesItem.getArtifactId(); + String groupId = sourcesItem.getGroupId(); for (InstallableUnitMapping siblingMapping : siblings) { if (siblingMapping == sourcesIU) continue; MavenItem sibling = siblingMapping.map(); - if (sibling.getGroupId().equals(sourcesItem.getGroupId()) - && sibling.getArtifactId().equals(sourcesItem.getArtifactId()) && sibling.getClassifier() == null) { + if (sibling.getGroupId().equals(groupId) + && sibling.getArtifactId().equals(artifactId) && sibling.getClassifier() == null) { siblingMapping.setHasSources(true); break; } @@ -453,4 +454,14 @@ public static SnapshotVersion createSnapshotVersion(String classifier, String ex return snapshotVersion; } + public static String toXML(Model model) { + StringWriter out = new StringWriter(); + try { + new DefaultModelWriter().write(out, Map.of(), model); + } catch (IOException e) { + throw new RuntimeException(e); + } + return out.toString(); + } + } diff --git a/plugins/org.eclipse.cbi.p2repo.aggregator.engine/src/org/eclipse/cbi/p2repo/aggregator/engine/Builder.java b/plugins/org.eclipse.cbi.p2repo.aggregator.engine/src/org/eclipse/cbi/p2repo/aggregator/engine/Builder.java index b2ecf12b2..7628cbfbf 100644 --- a/plugins/org.eclipse.cbi.p2repo.aggregator.engine/src/org/eclipse/cbi/p2repo/aggregator/engine/Builder.java +++ b/plugins/org.eclipse.cbi.p2repo.aggregator.engine/src/org/eclipse/cbi/p2repo/aggregator/engine/Builder.java @@ -21,6 +21,7 @@ import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URISyntaxException; +import java.nio.file.Files; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; @@ -30,6 +31,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Properties; @@ -51,6 +53,7 @@ import org.eclipse.cbi.p2repo.aggregator.Feature; import org.eclipse.cbi.p2repo.aggregator.MappedRepository; import org.eclipse.cbi.p2repo.aggregator.MappedUnit; +import org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping; import org.eclipse.cbi.p2repo.aggregator.MavenMapping; import org.eclipse.cbi.p2repo.aggregator.MetadataRepositoryReference; import org.eclipse.cbi.p2repo.aggregator.PackedStrategy; @@ -59,6 +62,7 @@ import org.eclipse.cbi.p2repo.aggregator.engine.maven.MavenManager; import org.eclipse.cbi.p2repo.aggregator.engine.maven.MavenRepositoryHelper; import org.eclipse.cbi.p2repo.aggregator.impl.MetadataRepositoryReferenceImpl; +import org.eclipse.cbi.p2repo.aggregator.util.InstallableUnitUtils; import org.eclipse.cbi.p2repo.aggregator.util.ResourceUtils; import org.eclipse.cbi.p2repo.p2.MetadataRepository; import org.eclipse.cbi.p2repo.p2.loader.IRepositoryLoader; @@ -112,6 +116,7 @@ import org.eclipse.equinox.p2.publisher.Publisher; import org.eclipse.equinox.p2.query.IQuery; import org.eclipse.equinox.p2.query.IQueryResult; +import org.eclipse.equinox.p2.query.IQueryable; import org.eclipse.equinox.p2.query.QueryUtil; import org.eclipse.equinox.p2.repository.IRepository; import org.eclipse.equinox.p2.repository.artifact.IArtifactDescriptor; @@ -499,6 +504,8 @@ private static void send(String host, int port, EmailAddress from, List keysToExcludeFromMirroring; + private boolean analyzeMaven; + /** * Mark the specified repository as not eligible for verbatim mapping. * @@ -980,7 +987,7 @@ public String getVerificationIUName(ValidationSet validationSet) { return "validationSet_" + getSafeValidationSetName(validationSet); } - private void initializeArtifactMirroring(IProgressMonitor monitor) throws CoreException { + private void initializeArtifactMirroring(Set ius, IProgressMonitor monitor) throws CoreException { arCache = null; SubMonitor subMon = SubMonitor.convert(monitor, 1000); try { @@ -988,7 +995,7 @@ private void initializeArtifactMirroring(IProgressMonitor monitor) throws CoreEx aggregationAr = getAggregationArtifactRepository(subMon.newChild(5)); if (getAggregation().isMavenResult()) - mavenInitializeMirroring(aggregationAr, subMon.newChild(10)); + mavenInitializeMirroring(aggregationAr, ius, subMon.newChild(10)); // Clear final destination File destination = new File(getBuildRoot(), REPO_FOLDER_FINAL); @@ -1112,9 +1119,11 @@ public boolean isVerifyOnly() { return action == ActionType.VALIDATE; } - private void loadAllMappedRepositories(IProgressMonitor monitor) throws CoreException { + private Set loadAllMappedRepositories(IProgressMonitor monitor) throws CoreException { LogUtils.info("Loading all repositories"); + Set ius = new LinkedHashSet<>(); + Set repositoriesToLoad = new HashSet(); Aggregation aggregation = getAggregation(); @@ -1170,6 +1179,8 @@ public void notifyChanged(Notification msg) { errors.put(contrib, contribErrors = new ArrayList()); contribErrors.add(msg); } + + ius.addAll(mdr.query(QueryUtil.ALL_UNITS, null).toSet()); } if (errors.size() > 0) { @@ -1177,6 +1188,8 @@ public void notifyChanged(Notification msg) { sendEmail(entry.getKey(), entry.getValue()); throw ExceptionUtils.fromMessage("Not all repositories could be loaded (see log for details)"); } + + return ius; } catch (CoreException e) { for (MetadataRepositoryReference repo : repositoriesToLoad) { repo.cancelRepositoryLoad(); @@ -1387,8 +1400,8 @@ private void mavenApplyRules(MappedRepository repo, IInstallableUnit iu, IArtifa } - private void mavenInitializeMirroring(IFileArtifactRepository aggregateAr, IProgressMonitor monitor) - throws CoreException { + private void mavenInitializeMirroring(IFileArtifactRepository aggregateAr, Set allIUs, + IProgressMonitor monitor) throws CoreException { // If maven result is required, prepare the maven metadata structure List allContribs = getAggregation().getAllContributions(true); SubMonitor childMonitor = SubMonitor.convert(monitor, allContribs.size() * 10); @@ -1398,6 +1411,8 @@ private void mavenInitializeMirroring(IFileArtifactRepository aggregateAr, IProg allUnitsToAggregate.addAll(vsas.getUnitsToAggregate()); } + IQueryable index = InstallableUnitUtils.getIndex(allIUs); + List iusToMaven = new ArrayList(); for (Contribution contrib : allContribs) { SubMonitor contribMonitor = childMonitor.newChild(10); @@ -1427,10 +1442,14 @@ private void mavenInitializeMirroring(IFileArtifactRepository aggregateAr, IProg iusToMirror.add(iu); } - List allMavenMappings = contrib.getAllMavenMappings(); - if (iusToMirror != null) + if (iusToMirror != null) { + List allMavenMappings = contrib.getAllMavenMappings(); + List allMavenDependencyMappings = contrib + .getAllMavenDependencyMappings(); for (IInstallableUnit iu : iusToMirror) - iusToMaven.add(new InstallableUnitMapping(contrib, iu, allMavenMappings, iusToMaven)); + iusToMaven.add(new InstallableUnitMapping(contrib, iu, allMavenMappings, + allMavenDependencyMappings, index, allUnitsToAggregate)); + } MonitorUtils.worked(contribMonitor, 100); } @@ -1458,8 +1477,10 @@ private void mavenInitializeMirroring(IFileArtifactRepository aggregateAr, IProg if (packedStrategy != PackedStrategy.SKIP && packedStrategy != PackedStrategy.UNPACK && packedStrategy != PackedStrategy.UNPACK_AS_SIBLING) { packedStrategy = PackedStrategy.UNPACK_AS_SIBLING; - LogUtils.info("Maven result is required, changing packed strategy from %s to %s", - aggregation.getPackedStrategy().getName(), packedStrategy.getName()); + if (aggregation.getPackedStrategy() != PackedStrategy.UNPACK_AS_SIBLING) { + LogUtils.info("Maven result is required, changing packed strategy from %s to %s", + aggregation.getPackedStrategy().getName(), packedStrategy.getName()); + } } List mappingRules = new ArrayList(); @@ -1663,7 +1684,7 @@ public int run(boolean fromIDE, IProgressMonitor monitor) throws Exception { P2Utils.ungetProfileRegistry(provisioningAgent, profileRegistry); } - loadAllMappedRepositories(subMon.newChild(100)); + Set ius = loadAllMappedRepositories(subMon.newChild(100)); // we generate the verification IUs in a separate loop // to detect non p2 related problems early @@ -1686,7 +1707,7 @@ public int run(boolean fromIDE, IProgressMonitor monitor) throws Exception { runMetadataMirroring(validationSet, subMon.newChild(100)); } runCategoriesRepoGenerator(subMon.newChild(5)); - initializeArtifactMirroring(subMon.newChild(10)); + initializeArtifactMirroring(ius, subMon.newChild(10)); for (ValidationSet validationSet : validationSets) { MonitorUtils.testCancelStatus(subMon); if (!validationSet.isAbstract()) @@ -1694,6 +1715,13 @@ public int run(boolean fromIDE, IProgressMonitor monitor) throws Exception { } MonitorUtils.testCancelStatus(monitor); finishMirroring(monitor); + } else if (analyzeMaven && getAggregation().isMavenResult()) { + java.nio.file.Path temporaryArtifactRepository = Files.createTempDirectory("aggr"); + aggregationAr = (IFileArtifactRepository) arManager.createRepository( + temporaryArtifactRepository.toUri(), getAggregation().getLabel() + " artifacts", //$NON-NLS-1$ + SIMPLE_ARTIFACTS_TYPE, Collections.emptyMap()); + mavenInitializeMirroring(aggregationAr, ius, monitor); + IOUtils.delete(temporaryArtifactRepository); } return 0; } catch (OperationCanceledException e) { @@ -1950,6 +1978,14 @@ public void setValidationIUs(List validationIUs) { this.validationIUs = validationIUs; } + public void setAnalyzeMaven(boolean analyzeMaven) { + this.analyzeMaven = analyzeMaven; + } + + public InstallableUnitMapping getInstallableUnitMapping() { + return mavenHelper == null ? null : mavenHelper.getTop(); + } + private void verifyContributions() throws CoreException { List errors = new ArrayList(); for (ValidationSet vs : aggregation.getValidationSets()) { diff --git a/plugins/org.eclipse.cbi.p2repo.aggregator.engine/src/org/eclipse/cbi/p2repo/aggregator/engine/MirrorGenerator.java b/plugins/org.eclipse.cbi.p2repo.aggregator.engine/src/org/eclipse/cbi/p2repo/aggregator/engine/MirrorGenerator.java index 2894e9593..4571af165 100644 --- a/plugins/org.eclipse.cbi.p2repo.aggregator.engine/src/org/eclipse/cbi/p2repo/aggregator/engine/MirrorGenerator.java +++ b/plugins/org.eclipse.cbi.p2repo.aggregator.engine/src/org/eclipse/cbi/p2repo/aggregator/engine/MirrorGenerator.java @@ -529,7 +529,7 @@ public void run(IProgressMonitor monitor) throws CoreException { MonitorUtils.done(contribMonitor); } - LogUtils.error("Saving: " + aggregationAr.getLocation()); + LogUtils.info("Saving: " + aggregationAr.getLocation()); disableSave.run(); xzCompress(aggregationAr); @@ -553,7 +553,7 @@ public void run(IProgressMonitor monitor) throws CoreException { private void xzCompress(IFileArtifactRepository aggregationAr) { try { - LogUtils.error("XZ compressing: " + aggregationAr.getLocation()); + LogUtils.info("XZ compressing: " + aggregationAr.getLocation()); XZCompressor xzCompressor = new XZCompressor(); xzCompressor.setRepoFolder(Paths.get(aggregationAr.getLocation()).toString()); xzCompressor.compressRepo(); diff --git a/plugins/org.eclipse.cbi.p2repo.aggregator/model/Aggregator.ecore b/plugins/org.eclipse.cbi.p2repo.aggregator/model/Aggregator.ecore index 4e1708409..a6bb7b2c6 100644 --- a/plugins/org.eclipse.cbi.p2repo.aggregator/model/Aggregator.ecore +++ b/plugins/org.eclipse.cbi.p2repo.aggregator/model/Aggregator.ecore @@ -37,6 +37,15 @@ defaultValueLiteral="0"/> + + +
+ + +
+ + @@ -95,6 +104,11 @@ + + +
+ + @@ -102,6 +116,15 @@ eType="#//Contact" eKeys="#//Contact/email"/> + + +
+ + +
+ + + + +
+ + + + + + @@ -226,9 +259,26 @@ - + + + + +
+ + + + + + + + + + + + + + diff --git a/plugins/org.eclipse.cbi.p2repo.aggregator/model/Aggregator.genmodel b/plugins/org.eclipse.cbi.p2repo.aggregator/model/Aggregator.genmodel index 726e090e2..abf31b4c4 100644 --- a/plugins/org.eclipse.cbi.p2repo.aggregator/model/Aggregator.genmodel +++ b/plugins/org.eclipse.cbi.p2repo.aggregator/model/Aggregator.genmodel @@ -114,6 +114,7 @@ + @@ -161,10 +162,12 @@ + + @@ -236,6 +239,12 @@ + + + + + + @@ -259,6 +268,21 @@ + + + + + + + + + + + + + + + diff --git a/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/Aggregation.java b/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/Aggregation.java index e601377d7..e3b8a3ffc 100644 --- a/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/Aggregation.java +++ b/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/Aggregation.java @@ -37,6 +37,7 @@ *
  • {@link org.eclipse.cbi.p2repo.aggregator.Aggregation#getVersionFormat Version Format}
  • *
  • {@link org.eclipse.cbi.p2repo.aggregator.Aggregation#getMavenBuildNumber Maven Build Number}
  • *
  • {@link org.eclipse.cbi.p2repo.aggregator.Aggregation#getMavenMappings Maven Mappings}
  • + *
  • {@link org.eclipse.cbi.p2repo.aggregator.Aggregation#getMavenDependencyMappings Maven Dependency Mappings}
  • *
  • {@link org.eclipse.cbi.p2repo.aggregator.Aggregation#isAllowLegacySites Allow Legacy Sites}
  • * * @@ -160,6 +161,22 @@ public interface Aggregation extends DescriptionProvider, StatusProvider, InfosP */ EList getMavenMappings(); + /** + * Returns the value of the 'Maven Dependency Mappings' containment reference list. + * The list contents are of type {@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping}. + * + * + * + * @since 1.1.0 + * + * @return the value of the 'Maven Dependency Mappings' containment reference list. + * @see org.eclipse.cbi.p2repo.aggregator.AggregatorPackage#getAggregation_MavenDependencyMappings() + * @model containment="true" resolveProxies="true" + * extendedMetaData="name='mavenDependencyMapping'" + * @generated + */ + EList getMavenDependencyMappings(); + /** * Returns the value of the 'Packed Strategy' attribute. * The literals are from the enumeration {@link org.eclipse.cbi.p2repo.aggregator.PackedStrategy}. diff --git a/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/AggregatorFactory.java b/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/AggregatorFactory.java index eae9b7fca..1ad8ebf7e 100644 --- a/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/AggregatorFactory.java +++ b/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/AggregatorFactory.java @@ -157,6 +157,16 @@ public interface AggregatorFactory extends EFactory { */ MappedRepository createMappedRepository(); + /** + * Returns a new object of class 'Maven Dependency Item'. + * + * + * @return a new object of class 'Maven Dependency Item'. + * @since 1.1.0 + * @generated + */ + MavenDependencyItem createMavenDependencyItem(); + /** * Returns a new object of class 'Mapped Repository'. * @@ -193,6 +203,16 @@ public interface AggregatorFactory extends EFactory { */ MavenMapping createMavenMapping(); + /** + * Returns a new object of class 'Maven Dependency Mapping'. + * + * + * @return a new object of class 'Maven Dependency Mapping'. + * @since 1.1.0 + * @generated + */ + MavenDependencyMapping createMavenDependencyMapping(); + /** * Returns a new object of class 'Metadata Repository Reference'. * diff --git a/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/AggregatorPackage.java b/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/AggregatorPackage.java index a5f679175..d6bbb144e 100644 --- a/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/AggregatorPackage.java +++ b/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/AggregatorPackage.java @@ -177,6 +177,15 @@ interface Literals { */ EReference AGGREGATION__MAVEN_MAPPINGS = eINSTANCE.getAggregation_MavenMappings(); + /** + * The meta object literal for the 'Maven Dependency Mappings' containment reference list feature. + * + * + * @since 1.1.0 + * @generated + */ + EReference AGGREGATION__MAVEN_DEPENDENCY_MAPPINGS = eINSTANCE.getAggregation_MavenDependencyMappings(); + /** * The meta object literal for the 'Allow Legacy Sites' attribute feature. * @@ -385,6 +394,15 @@ interface Literals { */ EReference CONTRIBUTION__MAVEN_MAPPINGS = eINSTANCE.getContribution_MavenMappings(); + /** + * The meta object literal for the 'Maven Dependency Mappings' containment reference list feature. + * + * + * @since 1.1.0 + * @generated + */ + EReference CONTRIBUTION__MAVEN_DEPENDENCY_MAPPINGS = eINSTANCE.getContribution_MavenDependencyMappings(); + /** * The meta object literal for the '{@link org.eclipse.cbi.p2repo.aggregator.impl.ContactImpl Contact}' class. * @@ -597,6 +615,54 @@ interface Literals { */ EClass MAP_RULE = eINSTANCE.getMapRule(); + /** + * The meta object literal for the '{@link org.eclipse.cbi.p2repo.aggregator.impl.MavenDependencyItemImpl Maven Dependency Item}' class. + * + * + * @see org.eclipse.cbi.p2repo.aggregator.impl.MavenDependencyItemImpl + * @see org.eclipse.cbi.p2repo.aggregator.impl.AggregatorPackageImpl#getMavenDependencyItem() + * @since 1.1.0 + * @generated + */ + EClass MAVEN_DEPENDENCY_ITEM = eINSTANCE.getMavenDependencyItem(); + + /** + * The meta object literal for the 'Group Id' attribute feature. + * + * + * @since 1.1.0 + * @generated + */ + EAttribute MAVEN_DEPENDENCY_ITEM__GROUP_ID = eINSTANCE.getMavenDependencyItem_GroupId(); + + /** + * The meta object literal for the 'Artifact Id' attribute feature. + * + * + * @since 1.1.0 + * @generated + */ + EAttribute MAVEN_DEPENDENCY_ITEM__ARTIFACT_ID = eINSTANCE.getMavenDependencyItem_ArtifactId(); + + /** + * The meta object literal for the 'Mapped Version Range' attribute feature. + * + * + * @since 1.1.0 + * @generated + */ + EAttribute MAVEN_DEPENDENCY_ITEM__MAPPED_VERSION_RANGE = eINSTANCE.getMavenDependencyItem_MappedVersionRange(); + + /** + * The meta object literal for the 'Maven Dependency Mapping' reference feature. + * + * + * @since 1.1.0 + * @generated + */ + EReference MAVEN_DEPENDENCY_ITEM__MAVEN_DEPENDENCY_MAPPING = eINSTANCE + .getMavenDependencyItem_MavenDependencyMapping(); + /** * The meta object literal for the '{@link org.eclipse.cbi.p2repo.aggregator.impl.InstallableUnitRequestImpl Installable Unit Request}' class. * @@ -941,6 +1007,82 @@ interface Literals { */ EAttribute MAVEN_MAPPING__SNAPSHOT = eINSTANCE.getMavenMapping_Snapshot(); + /** + * The meta object literal for the '{@link org.eclipse.cbi.p2repo.aggregator.impl.MavenDependencyMappingImpl Maven Dependency Mapping}' class. + * + * + * @see org.eclipse.cbi.p2repo.aggregator.impl.MavenDependencyMappingImpl + * @see org.eclipse.cbi.p2repo.aggregator.impl.AggregatorPackageImpl#getMavenDependencyMapping() + * @since 1.1.0 + * @generated + */ + EClass MAVEN_DEPENDENCY_MAPPING = eINSTANCE.getMavenDependencyMapping(); + + /** + * The meta object literal for the 'Iu Name Pattern' attribute feature. + * + * + * @since 1.1.0 + * @generated + */ + EAttribute MAVEN_DEPENDENCY_MAPPING__IU_NAME_PATTERN = eINSTANCE.getMavenDependencyMapping_IuNamePattern(); + + /** + * The meta object literal for the 'Namespace Pattern' attribute feature. + * + * + * @since 1.1.0 + * @generated + */ + EAttribute MAVEN_DEPENDENCY_MAPPING__NAMESPACE_PATTERN = eINSTANCE.getMavenDependencyMapping_NamespacePattern(); + + /** + * The meta object literal for the 'Name Pattern' attribute feature. + * + * + * @since 1.1.0 + * @generated + */ + EAttribute MAVEN_DEPENDENCY_MAPPING__NAME_PATTERN = eINSTANCE.getMavenDependencyMapping_NamePattern(); + + /** + * The meta object literal for the 'Group Id' attribute feature. + * + * + * @since 1.1.0 + * @generated + */ + EAttribute MAVEN_DEPENDENCY_MAPPING__GROUP_ID = eINSTANCE.getMavenDependencyMapping_GroupId(); + + /** + * The meta object literal for the 'Artifact Id' attribute feature. + * + * + * @since 1.1.0 + * @generated + */ + EAttribute MAVEN_DEPENDENCY_MAPPING__ARTIFACT_ID = eINSTANCE.getMavenDependencyMapping_ArtifactId(); + + /** + * The meta object literal for the 'Version Range Pattern' attribute feature. + * + * + * @since 1.1.0 + * @generated + */ + EAttribute MAVEN_DEPENDENCY_MAPPING__VERSION_RANGE_PATTERN = eINSTANCE + .getMavenDependencyMapping_VersionRangePattern(); + + /** + * The meta object literal for the 'Version Range Template' attribute feature. + * + * + * @since 1.1.0 + * @generated + */ + EAttribute MAVEN_DEPENDENCY_MAPPING__VERSION_RANGE_TEMPLATE = eINSTANCE + .getMavenDependencyMapping_VersionRangeTemplate(); + /** * The meta object literal for the '{@link org.eclipse.cbi.p2repo.aggregator.impl.MavenItemImpl Maven Item}' class. * @@ -1394,6 +1536,16 @@ interface Literals { */ int AGGREGATION__MAVEN_MAPPINGS = DESCRIPTION_PROVIDER_FEATURE_COUNT + 19; + /** + * The feature id for the 'Maven Dependency Mappings' containment reference list. + * + * + * @since 1.1.0 + * @generated + * @ordered + */ + int AGGREGATION__MAVEN_DEPENDENCY_MAPPINGS = DESCRIPTION_PROVIDER_FEATURE_COUNT + 20; + /** * The feature id for the 'Allow Legacy Sites' attribute. * @@ -1401,7 +1553,7 @@ interface Literals { * @generated * @ordered */ - int AGGREGATION__ALLOW_LEGACY_SITES = DESCRIPTION_PROVIDER_FEATURE_COUNT + 20; + int AGGREGATION__ALLOW_LEGACY_SITES = DESCRIPTION_PROVIDER_FEATURE_COUNT + 21; /** * The number of structural features of the 'Aggregation' class. @@ -1410,7 +1562,7 @@ interface Literals { * @generated * @ordered */ - int AGGREGATION_FEATURE_COUNT = DESCRIPTION_PROVIDER_FEATURE_COUNT + 21; + int AGGREGATION_FEATURE_COUNT = DESCRIPTION_PROVIDER_FEATURE_COUNT + 22; /** * The meta object id for the '{@link org.eclipse.cbi.p2repo.aggregator.EnabledStatusProvider Enabled Status Provider}' class. @@ -1430,7 +1582,7 @@ interface Literals { * @see org.eclipse.cbi.p2repo.aggregator.impl.AggregatorPackageImpl#getValidationSet() * @generated */ - int VALIDATION_SET = 28; + int VALIDATION_SET = 30; /** * The meta object id for the '{@link org.eclipse.cbi.p2repo.aggregator.impl.MetadataRepositoryReferenceImpl Metadata Repository Reference}' class. @@ -1440,7 +1592,7 @@ interface Literals { * @see org.eclipse.cbi.p2repo.aggregator.impl.AggregatorPackageImpl#getMetadataRepositoryReference() * @generated */ - int METADATA_REPOSITORY_REFERENCE = 23; + int METADATA_REPOSITORY_REFERENCE = 25; /** * The meta object id for the '{@link org.eclipse.cbi.p2repo.aggregator.impl.MappedRepositoryImpl Mapped Repository}' class. @@ -1500,7 +1652,7 @@ interface Literals { * @see org.eclipse.cbi.p2repo.aggregator.impl.AggregatorPackageImpl#getStatusProvider() * @generated */ - int STATUS_PROVIDER = 27; + int STATUS_PROVIDER = 29; /** * The meta object id for the '{@link org.eclipse.cbi.p2repo.aggregator.impl.InstallableUnitRequestImpl Installable Unit Request}' class. @@ -1540,7 +1692,7 @@ interface Literals { * @see org.eclipse.cbi.p2repo.aggregator.impl.AggregatorPackageImpl#getProduct() * @generated */ - int PRODUCT = 24; + int PRODUCT = 26; /** * The meta object id for the '{@link org.eclipse.cbi.p2repo.aggregator.impl.PropertyImpl Property}' class. @@ -1550,7 +1702,7 @@ interface Literals { * @see org.eclipse.cbi.p2repo.aggregator.impl.AggregatorPackageImpl#getProperty() * @generated */ - int PROPERTY = 25; + int PROPERTY = 27; /** * The meta object id for the '{@link org.eclipse.cbi.p2repo.aggregator.impl.CategoryImpl Category}' class. @@ -1600,7 +1752,7 @@ interface Literals { * @see org.eclipse.cbi.p2repo.aggregator.impl.AggregatorPackageImpl#getValidConfigurationsRule() * @generated */ - int VALID_CONFIGURATIONS_RULE = 29; + int VALID_CONFIGURATIONS_RULE = 31; /** * The meta object id for the '{@link org.eclipse.cbi.p2repo.aggregator.LabelProvider Label Provider}' class. @@ -1630,7 +1782,7 @@ interface Literals { * @see org.eclipse.cbi.p2repo.aggregator.impl.AggregatorPackageImpl#getMavenMapping() * @generated */ - int MAVEN_MAPPING = 22; + int MAVEN_MAPPING = 23; /** * The meta object id for the '{@link org.eclipse.cbi.p2repo.aggregator.impl.MavenItemImpl Maven Item}' class. @@ -1640,7 +1792,7 @@ interface Literals { * @see org.eclipse.cbi.p2repo.aggregator.impl.AggregatorPackageImpl#getMavenItem() * @generated */ - int MAVEN_ITEM = 21; + int MAVEN_ITEM = 22; /** * The meta object id for the '{@link org.eclipse.cbi.p2repo.aggregator.ChildrenProvider Children Provider}' class. @@ -1660,7 +1812,7 @@ interface Literals { * @see org.eclipse.cbi.p2repo.aggregator.impl.AggregatorPackageImpl#getStatus() * @generated */ - int STATUS = 26; + int STATUS = 28; /** * The meta object id for the '{@link org.eclipse.cbi.p2repo.aggregator.impl.InfosProviderImpl Infos Provider}' class. @@ -2466,6 +2618,16 @@ interface Literals { */ int CONTRIBUTION__MAVEN_MAPPINGS = ENABLED_STATUS_PROVIDER_FEATURE_COUNT + 8; + /** + * The feature id for the 'Maven Dependency Mappings' containment reference list. + * + * + * @since 1.1.0 + * @generated + * @ordered + */ + int CONTRIBUTION__MAVEN_DEPENDENCY_MAPPINGS = ENABLED_STATUS_PROVIDER_FEATURE_COUNT + 9; + /** * The number of structural features of the 'Contribution' class. * @@ -2473,7 +2635,7 @@ interface Literals { * @generated * @ordered */ - int CONTRIBUTION_FEATURE_COUNT = ENABLED_STATUS_PROVIDER_FEATURE_COUNT + 9; + int CONTRIBUTION_FEATURE_COUNT = ENABLED_STATUS_PROVIDER_FEATURE_COUNT + 10; /** * The feature id for the 'Status' reference. @@ -3213,6 +3375,67 @@ interface Literals { */ int MAPPED_REPOSITORY_FEATURE_COUNT = METADATA_REPOSITORY_REFERENCE_FEATURE_COUNT + 8; + /** + * The meta object id for the '{@link org.eclipse.cbi.p2repo.aggregator.impl.MavenDependencyItemImpl Maven Dependency Item}' class. + * + * + * @see org.eclipse.cbi.p2repo.aggregator.impl.MavenDependencyItemImpl + * @see org.eclipse.cbi.p2repo.aggregator.impl.AggregatorPackageImpl#getMavenDependencyItem() + * @since 1.1.0 + * @generated + */ + int MAVEN_DEPENDENCY_ITEM = 21; + + /** + * The feature id for the 'Group Id' attribute. + * + * + * @since 1.1.0 + * @generated + * @ordered + */ + int MAVEN_DEPENDENCY_ITEM__GROUP_ID = 0; + + /** + * The feature id for the 'Artifact Id' attribute. + * + * + * @since 1.1.0 + * @generated + * @ordered + */ + int MAVEN_DEPENDENCY_ITEM__ARTIFACT_ID = 1; + + /** + * The feature id for the 'Mapped Version Range' attribute. + * + * + * @since 1.1.0 + * @generated + * @ordered + */ + int MAVEN_DEPENDENCY_ITEM__MAPPED_VERSION_RANGE = 2; + + /** + * The feature id for the 'Maven Dependency Mapping' reference. + * + * + * @since 1.1.0 + * @generated + * @ordered + */ + int MAVEN_DEPENDENCY_ITEM__MAVEN_DEPENDENCY_MAPPING = 3; + + /** + * The number of structural features of the 'Maven Dependency Item' class. + * + * + * @since 1.1.0 + * @generated + * @ordered + */ + int MAVEN_DEPENDENCY_ITEM_FEATURE_COUNT = 4; + /** * The feature id for the 'Group Id' attribute. * @@ -3366,6 +3589,133 @@ interface Literals { */ int MAVEN_MAPPING_FEATURE_COUNT = STATUS_PROVIDER_FEATURE_COUNT + 9; + /** + * The meta object id for the '{@link org.eclipse.cbi.p2repo.aggregator.impl.MavenDependencyMappingImpl Maven Dependency Mapping}' class. + * + * + * @see org.eclipse.cbi.p2repo.aggregator.impl.MavenDependencyMappingImpl + * @see org.eclipse.cbi.p2repo.aggregator.impl.AggregatorPackageImpl#getMavenDependencyMapping() + * @since 1.1.0 + * @generated + */ + int MAVEN_DEPENDENCY_MAPPING = 24; + + /** + * The feature id for the 'Status' reference. + * + * + * @generated + * @ordered + */ + int MAVEN_DEPENDENCY_MAPPING__STATUS = STATUS_PROVIDER__STATUS; + + /** + * The feature id for the 'Errors' attribute list. + * + * + * @generated + * @ordered + */ + int MAVEN_DEPENDENCY_MAPPING__ERRORS = STATUS_PROVIDER_FEATURE_COUNT + 0; + + /** + * The feature id for the 'Warnings' attribute list. + * + * + * @generated + * @ordered + */ + int MAVEN_DEPENDENCY_MAPPING__WARNINGS = STATUS_PROVIDER_FEATURE_COUNT + 1; + + /** + * The feature id for the 'Infos' attribute list. + * + * + * @generated + * @ordered + */ + int MAVEN_DEPENDENCY_MAPPING__INFOS = STATUS_PROVIDER_FEATURE_COUNT + 2; + + /** + * The feature id for the 'Iu Name Pattern' attribute. + * + * + * @since 1.1.0 + * @generated + * @ordered + */ + int MAVEN_DEPENDENCY_MAPPING__IU_NAME_PATTERN = STATUS_PROVIDER_FEATURE_COUNT + 3; + + /** + * The feature id for the 'Namespace Pattern' attribute. + * + * + * @since 1.1.0 + * @generated + * @ordered + */ + int MAVEN_DEPENDENCY_MAPPING__NAMESPACE_PATTERN = STATUS_PROVIDER_FEATURE_COUNT + 4; + + /** + * The feature id for the 'Name Pattern' attribute. + * + * + * @since 1.1.0 + * @generated + * @ordered + */ + int MAVEN_DEPENDENCY_MAPPING__NAME_PATTERN = STATUS_PROVIDER_FEATURE_COUNT + 5; + + /** + * The feature id for the 'Group Id' attribute. + * + * + * @since 1.1.0 + * @generated + * @ordered + */ + int MAVEN_DEPENDENCY_MAPPING__GROUP_ID = STATUS_PROVIDER_FEATURE_COUNT + 6; + + /** + * The feature id for the 'Artifact Id' attribute. + * + * + * @since 1.1.0 + * @generated + * @ordered + */ + int MAVEN_DEPENDENCY_MAPPING__ARTIFACT_ID = STATUS_PROVIDER_FEATURE_COUNT + 7; + + /** + * The feature id for the 'Version Range Pattern' attribute. + * + * + * @since 1.1.0 + * @generated + * @ordered + */ + int MAVEN_DEPENDENCY_MAPPING__VERSION_RANGE_PATTERN = STATUS_PROVIDER_FEATURE_COUNT + 8; + + /** + * The feature id for the 'Version Range Template' attribute. + * + * + * @since 1.1.0 + * @generated + * @ordered + */ + int MAVEN_DEPENDENCY_MAPPING__VERSION_RANGE_TEMPLATE = STATUS_PROVIDER_FEATURE_COUNT + 9; + + /** + * The number of structural features of the 'Maven Dependency Mapping' class. + * + * + * @since 1.1.0 + * @generated + * @ordered + */ + int MAVEN_DEPENDENCY_MAPPING_FEATURE_COUNT = STATUS_PROVIDER_FEATURE_COUNT + 10; + /** * The feature id for the 'Status' reference. * @@ -3788,7 +4138,7 @@ interface Literals { * @see org.eclipse.cbi.p2repo.aggregator.impl.AggregatorPackageImpl#getAggregationType() * @generated */ - int AGGREGATION_TYPE = 30; + int AGGREGATION_TYPE = 32; /** * The meta object id for the '{@link org.eclipse.cbi.p2repo.aggregator.OperatingSystem Operating System}' enum. @@ -3798,7 +4148,7 @@ interface Literals { * @see org.eclipse.cbi.p2repo.aggregator.impl.AggregatorPackageImpl#getOperatingSystem() * @generated */ - int OPERATING_SYSTEM = 34; + int OPERATING_SYSTEM = 36; /** * The meta object id for the '{@link org.eclipse.cbi.p2repo.aggregator.WindowSystem Window System}' enum. @@ -3808,7 +4158,7 @@ interface Literals { * @see org.eclipse.cbi.p2repo.aggregator.impl.AggregatorPackageImpl#getWindowSystem() * @generated */ - int WINDOW_SYSTEM = 38; + int WINDOW_SYSTEM = 40; /** * The meta object id for the '{@link org.eclipse.cbi.p2repo.aggregator.VersionFormat Version Format}' enum. @@ -3818,7 +4168,7 @@ interface Literals { * @see org.eclipse.cbi.p2repo.aggregator.impl.AggregatorPackageImpl#getVersionFormat() * @generated */ - int VERSION_FORMAT = 39; + int VERSION_FORMAT = 41; /** * The meta object id for the '{@link org.eclipse.cbi.p2repo.aggregator.Architecture Architecture}' enum. @@ -3828,7 +4178,7 @@ interface Literals { * @see org.eclipse.cbi.p2repo.aggregator.impl.AggregatorPackageImpl#getArchitecture() * @generated */ - int ARCHITECTURE = 31; + int ARCHITECTURE = 33; /** * The meta object id for the '{@link org.eclipse.cbi.p2repo.aggregator.AvailableFrom Available From}' enum. @@ -3838,7 +4188,7 @@ interface Literals { * @see org.eclipse.cbi.p2repo.aggregator.impl.AggregatorPackageImpl#getAvailableFrom() * @generated */ - int AVAILABLE_FROM = 32; + int AVAILABLE_FROM = 34; /** * The meta object id for the '{@link org.eclipse.cbi.p2repo.aggregator.PackedStrategy Packed Strategy}' enum. @@ -3848,7 +4198,7 @@ interface Literals { * @see org.eclipse.cbi.p2repo.aggregator.impl.AggregatorPackageImpl#getPackedStrategy() * @generated */ - int PACKED_STRATEGY = 35; + int PACKED_STRATEGY = 37; /** * The meta object id for the '{@link org.eclipse.cbi.p2repo.aggregator.InstallableUnitType Installable Unit Type}' enum. @@ -3858,7 +4208,7 @@ interface Literals { * @see org.eclipse.cbi.p2repo.aggregator.impl.AggregatorPackageImpl#getInstallableUnitType() * @generated */ - int INSTALLABLE_UNIT_TYPE = 33; + int INSTALLABLE_UNIT_TYPE = 35; /** * The meta object id for the '{@link org.eclipse.cbi.p2repo.aggregator.StatusCode Status Code}' enum. @@ -3868,7 +4218,7 @@ interface Literals { * @see org.eclipse.cbi.p2repo.aggregator.impl.AggregatorPackageImpl#getStatusCode() * @generated */ - int STATUS_CODE = 36; + int STATUS_CODE = 38; /** * The meta object id for the '{@link org.eclipse.cbi.p2repo.aggregator.VersionMatch Version Match}' enum. @@ -3878,7 +4228,7 @@ interface Literals { * @see org.eclipse.cbi.p2repo.aggregator.impl.AggregatorPackageImpl#getVersionMatch() * @generated */ - int VERSION_MATCH = 37; + int VERSION_MATCH = 39; /** * Returns the meta object for class '{@link org.eclipse.cbi.p2repo.aggregator.Aggregation Aggregation}'. @@ -3989,6 +4339,18 @@ interface Literals { */ EReference getAggregation_MavenMappings(); + /** + * Returns the meta object for the containment reference list '{@link org.eclipse.cbi.p2repo.aggregator.Aggregation#getMavenDependencyMappings Maven Dependency Mappings}'. + * + * + * @return the meta object for the containment reference list 'Maven Dependency Mappings'. + * @see org.eclipse.cbi.p2repo.aggregator.Aggregation#getMavenDependencyMappings() + * @see #getAggregation() + * @since 1.1.0 + * @generated + */ + EReference getAggregation_MavenDependencyMappings(); + /** * Returns the meta object for the attribute '{@link org.eclipse.cbi.p2repo.aggregator.Aggregation#isMavenResult Maven Result}'. * @@ -4383,6 +4745,18 @@ interface Literals { */ EReference getContribution_MavenMappings(); + /** + * Returns the meta object for the containment reference list '{@link org.eclipse.cbi.p2repo.aggregator.Contribution#getMavenDependencyMappings Maven Dependency Mappings}'. + * + * + * @return the meta object for the containment reference list 'Maven Dependency Mappings'. + * @see org.eclipse.cbi.p2repo.aggregator.Contribution#getMavenDependencyMappings() + * @see #getContribution() + * @since 1.1.0 + * @generated + */ + EReference getContribution_MavenDependencyMappings(); + /** * Returns the meta object for the containment reference list '{@link org.eclipse.cbi.p2repo.aggregator.Contribution#getRepositories Repositories}'. * @@ -4788,6 +5162,65 @@ interface Literals { */ EClass getMapRule(); + /** + * Returns the meta object for class '{@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyItem Maven Dependency Item}'. + * + * + * @return the meta object for class 'Maven Dependency Item'. + * @see org.eclipse.cbi.p2repo.aggregator.MavenDependencyItem + * @since 1.1.0 + * @generated + */ + EClass getMavenDependencyItem(); + + /** + * Returns the meta object for the attribute '{@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyItem#getGroupId Group Id}'. + * + * + * @return the meta object for the attribute 'Group Id'. + * @see org.eclipse.cbi.p2repo.aggregator.MavenDependencyItem#getGroupId() + * @see #getMavenDependencyItem() + * @since 1.1.0 + * @generated + */ + EAttribute getMavenDependencyItem_GroupId(); + + /** + * Returns the meta object for the attribute '{@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyItem#getArtifactId Artifact Id}'. + * + * + * @return the meta object for the attribute 'Artifact Id'. + * @see org.eclipse.cbi.p2repo.aggregator.MavenDependencyItem#getArtifactId() + * @see #getMavenDependencyItem() + * @since 1.1.0 + * @generated + */ + EAttribute getMavenDependencyItem_ArtifactId(); + + /** + * Returns the meta object for the attribute '{@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyItem#getMappedVersionRange Mapped Version Range}'. + * + * + * @return the meta object for the attribute 'Mapped Version Range'. + * @see org.eclipse.cbi.p2repo.aggregator.MavenDependencyItem#getMappedVersionRange() + * @see #getMavenDependencyItem() + * @since 1.1.0 + * @generated + */ + EAttribute getMavenDependencyItem_MappedVersionRange(); + + /** + * Returns the meta object for the reference '{@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyItem#getMavenDependencyMapping Maven Dependency Mapping}'. + * + * + * @return the meta object for the reference 'Maven Dependency Mapping'. + * @see org.eclipse.cbi.p2repo.aggregator.MavenDependencyItem#getMavenDependencyMapping() + * @see #getMavenDependencyItem() + * @since 1.1.0 + * @generated + */ + EReference getMavenDependencyItem_MavenDependencyMapping(); + /** * Returns the meta object for class '{@link org.eclipse.cbi.p2repo.aggregator.MavenItem Maven Item}'. * @@ -4907,6 +5340,101 @@ interface Literals { */ EAttribute getMavenMapping_Snapshot(); + /** + * Returns the meta object for class '{@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping Maven Dependency Mapping}'. + * + * + * @return the meta object for class 'Maven Dependency Mapping'. + * @see org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping + * @since 1.1.0 + * @generated + */ + EClass getMavenDependencyMapping(); + + /** + * Returns the meta object for the attribute '{@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping#getIuNamePattern Iu Name Pattern}'. + * + * + * @return the meta object for the attribute 'Iu Name Pattern'. + * @see org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping#getIuNamePattern() + * @see #getMavenDependencyMapping() + * @since 1.1.0 + * @generated + */ + EAttribute getMavenDependencyMapping_IuNamePattern(); + + /** + * Returns the meta object for the attribute '{@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping#getNamespacePattern Namespace Pattern}'. + * + * + * @return the meta object for the attribute 'Namespace Pattern'. + * @see org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping#getNamespacePattern() + * @see #getMavenDependencyMapping() + * @since 1.1.0 + * @generated + */ + EAttribute getMavenDependencyMapping_NamespacePattern(); + + /** + * Returns the meta object for the attribute '{@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping#getNamePattern Name Pattern}'. + * + * + * @return the meta object for the attribute 'Name Pattern'. + * @see org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping#getNamePattern() + * @see #getMavenDependencyMapping() + * @since 1.1.0 + * @generated + */ + EAttribute getMavenDependencyMapping_NamePattern(); + + /** + * Returns the meta object for the attribute '{@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping#getGroupId Group Id}'. + * + * + * @return the meta object for the attribute 'Group Id'. + * @see org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping#getGroupId() + * @see #getMavenDependencyMapping() + * @since 1.1.0 + * @generated + */ + EAttribute getMavenDependencyMapping_GroupId(); + + /** + * Returns the meta object for the attribute '{@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping#getArtifactId Artifact Id}'. + * + * + * @return the meta object for the attribute 'Artifact Id'. + * @see org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping#getArtifactId() + * @see #getMavenDependencyMapping() + * @since 1.1.0 + * @generated + */ + EAttribute getMavenDependencyMapping_ArtifactId(); + + /** + * Returns the meta object for the attribute '{@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping#getVersionRangePattern Version Range Pattern}'. + * + * + * @return the meta object for the attribute 'Version Range Pattern'. + * @see org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping#getVersionRangePattern() + * @see #getMavenDependencyMapping() + * @since 1.1.0 + * @generated + */ + EAttribute getMavenDependencyMapping_VersionRangePattern(); + + /** + * Returns the meta object for the attribute '{@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping#getVersionRangeTemplate Version Range Template}'. + * + * + * @return the meta object for the attribute 'Version Range Template'. + * @see org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping#getVersionRangeTemplate() + * @see #getMavenDependencyMapping() + * @since 1.1.0 + * @generated + */ + EAttribute getMavenDependencyMapping_VersionRangeTemplate(); + /** * Returns the meta object for the attribute '{@link org.eclipse.cbi.p2repo.aggregator.MavenMapping#getGroupId Group Id}'. * diff --git a/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/Contribution.java b/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/Contribution.java index b694c9a28..6c3787d5d 100644 --- a/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/Contribution.java +++ b/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/Contribution.java @@ -25,6 +25,7 @@ *
  • {@link org.eclipse.cbi.p2repo.aggregator.Contribution#getRepositories Repositories}
  • *
  • {@link org.eclipse.cbi.p2repo.aggregator.Contribution#getContacts Contacts}
  • *
  • {@link org.eclipse.cbi.p2repo.aggregator.Contribution#getMavenMappings Maven Mappings}
  • + *
  • {@link org.eclipse.cbi.p2repo.aggregator.Contribution#getMavenDependencyMappings Maven Dependency Mappings}
  • * * * @see org.eclipse.cbi.p2repo.aggregator.AggregatorPackage#getContribution() @@ -41,6 +42,17 @@ public interface Contribution */ EList getAllMavenMappings(); + /** + * + * + * + * @since 1.1.0 + * + * @model kind="operation" + * @generated + */ + EList getAllMavenDependencyMappings(); + /** * Returns the value of the 'Contacts' reference list. * The list contents are of type {@link org.eclipse.cbi.p2repo.aggregator.Contact}. @@ -77,6 +89,22 @@ public interface Contribution */ EList getMavenMappings(); + /** + * Returns the value of the 'Maven Dependency Mappings' containment reference list. + * The list contents are of type {@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping}. + * + * + * + * @since 1.1.0 + * + * @return the value of the 'Maven Dependency Mappings' containment reference list. + * @see org.eclipse.cbi.p2repo.aggregator.AggregatorPackage#getContribution_MavenDependencyMappings() + * @model containment="true" resolveProxies="true" + * extendedMetaData="name='mavenDependencyMapping'" + * @generated + */ + EList getMavenDependencyMappings(); + /** * Returns the value of the 'Repositories' containment reference list. * The list contents are of type {@link org.eclipse.cbi.p2repo.aggregator.MappedRepository}. diff --git a/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/MavenDependencyItem.java b/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/MavenDependencyItem.java new file mode 100644 index 000000000..c9bf55b55 --- /dev/null +++ b/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/MavenDependencyItem.java @@ -0,0 +1,125 @@ +/** + * Copyright (c) 2022 Eclipse Foundation and others. + * + * 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 + */ +package org.eclipse.cbi.p2repo.aggregator; + +/** + * + * A representation of the model object 'Maven Dependency Item'. + * + * + * + * @since 1.1.0 + * + * + *

    + * The following features are supported: + *

    + *
      + *
    • {@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyItem#getGroupId Group Id}
    • + *
    • {@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyItem#getArtifactId Artifact Id}
    • + *
    • {@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyItem#getMappedVersionRange Mapped Version Range}
    • + *
    • {@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyItem#getMavenDependencyMapping Maven Dependency Mapping}
    • + *
    + * + * @see org.eclipse.cbi.p2repo.aggregator.AggregatorPackage#getMavenDependencyItem() + * @model + * @generated + */ +public interface MavenDependencyItem { + /** + * Returns the value of the 'Group Id' attribute. + * + * + * @return the value of the 'Group Id' attribute. + * @see #setGroupId(String) + * @see org.eclipse.cbi.p2repo.aggregator.AggregatorPackage#getMavenDependencyItem_GroupId() + * @model dataType="org.eclipse.emf.ecore.xml.type.String" + * @generated + */ + String getGroupId(); + + /** + * Sets the value of the '{@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyItem#getGroupId Group Id}' attribute. + * + * + * @param value the new value of the 'Group Id' attribute. + * @see #getGroupId() + * @generated + */ + void setGroupId(String value); + + /** + * Returns the value of the 'Artifact Id' attribute. + * + * + * @return the value of the 'Artifact Id' attribute. + * @see #setArtifactId(String) + * @see org.eclipse.cbi.p2repo.aggregator.AggregatorPackage#getMavenDependencyItem_ArtifactId() + * @model + * @generated + */ + String getArtifactId(); + + /** + * Sets the value of the '{@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyItem#getArtifactId Artifact Id}' attribute. + * + * + * @param value the new value of the 'Artifact Id' attribute. + * @see #getArtifactId() + * @generated + */ + void setArtifactId(String value); + + /** + * Returns the value of the 'Mapped Version Range' attribute. + * + * + * @return the value of the 'Mapped Version Range' attribute. + * @see #setMappedVersionRange(String) + * @see org.eclipse.cbi.p2repo.aggregator.AggregatorPackage#getMavenDependencyItem_MappedVersionRange() + * @model + * @generated + */ + String getMappedVersionRange(); + + /** + * Sets the value of the '{@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyItem#getMappedVersionRange Mapped Version Range}' attribute. + * + * + * @param value the new value of the 'Mapped Version Range' attribute. + * @see #getMappedVersionRange() + * @generated + */ + void setMappedVersionRange(String value); + + /** + * Returns the value of the 'Maven Dependency Mapping' reference. + * + * + * @return the value of the 'Maven Dependency Mapping' reference. + * @see #setMavenDependencyMapping(MavenDependencyMapping) + * @see org.eclipse.cbi.p2repo.aggregator.AggregatorPackage#getMavenDependencyItem_MavenDependencyMapping() + * @model + * @generated + */ + MavenDependencyMapping getMavenDependencyMapping(); + + /** + * Sets the value of the '{@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyItem#getMavenDependencyMapping Maven Dependency Mapping}' reference. + * + * + * @param value the new value of the 'Maven Dependency Mapping' reference. + * @see #getMavenDependencyMapping() + * @generated + */ + void setMavenDependencyMapping(MavenDependencyMapping value); + +} // MavenDependencyItem diff --git a/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/MavenDependencyMapping.java b/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/MavenDependencyMapping.java new file mode 100644 index 000000000..50eac7c47 --- /dev/null +++ b/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/MavenDependencyMapping.java @@ -0,0 +1,205 @@ +/** + * Copyright (c) 2022 Eclipse Foundation and others. + * + * 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 + */ +package org.eclipse.cbi.p2repo.aggregator; + +import org.eclipse.equinox.p2.metadata.VersionRange; + +/** + * + * A representation of the model object 'Maven Dependency Mapping'. + * + * + * + * @since 1.1.0 + * + * + *

    + * The following features are supported: + *

    + *
      + *
    • {@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping#getIuNamePattern Iu Name Pattern}
    • + *
    • {@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping#getNamespacePattern Namespace Pattern}
    • + *
    • {@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping#getNamePattern Name Pattern}
    • + *
    • {@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping#getGroupId Group Id}
    • + *
    • {@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping#getArtifactId Artifact Id}
    • + *
    • {@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping#getVersionRangePattern Version Range Pattern}
    • + *
    • {@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping#getVersionRangeTemplate Version Range Template}
    • + *
    + * + * @see org.eclipse.cbi.p2repo.aggregator.AggregatorPackage#getMavenDependencyMapping() + * @model + * @generated + */ +public interface MavenDependencyMapping extends StatusProvider, InfosProvider { + /** + * Returns the value of the 'Iu Name Pattern' attribute. + * + * + * @return the value of the 'Iu Name Pattern' attribute. + * @see #setIuNamePattern(String) + * @see org.eclipse.cbi.p2repo.aggregator.AggregatorPackage#getMavenDependencyMapping_IuNamePattern() + * @model + * @generated + */ + String getIuNamePattern(); + + /** + * Sets the value of the '{@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping#getIuNamePattern Iu Name Pattern}' attribute. + * + * + * @param value the new value of the 'Iu Name Pattern' attribute. + * @see #getIuNamePattern() + * @generated + */ + void setIuNamePattern(String value); + + /** + * Returns the value of the 'Namespace Pattern' attribute. + * + * + * @return the value of the 'Namespace Pattern' attribute. + * @see #setNamespacePattern(String) + * @see org.eclipse.cbi.p2repo.aggregator.AggregatorPackage#getMavenDependencyMapping_NamespacePattern() + * @model + * @generated + */ + String getNamespacePattern(); + + /** + * Sets the value of the '{@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping#getNamespacePattern Namespace Pattern}' attribute. + * + * + * @param value the new value of the 'Namespace Pattern' attribute. + * @see #getNamespacePattern() + * @generated + */ + void setNamespacePattern(String value); + + /** + * Returns the value of the 'Name Pattern' attribute. + * + * + * @return the value of the 'Name Pattern' attribute. + * @see #setNamePattern(String) + * @see org.eclipse.cbi.p2repo.aggregator.AggregatorPackage#getMavenDependencyMapping_NamePattern() + * @model + * @generated + */ + String getNamePattern(); + + /** + * Sets the value of the '{@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping#getNamePattern Name Pattern}' attribute. + * + * + * @param value the new value of the 'Name Pattern' attribute. + * @see #getNamePattern() + * @generated + */ + void setNamePattern(String value); + + /** + * Returns the value of the 'Group Id' attribute. + * + * + * @return the value of the 'Group Id' attribute. + * @see #setGroupId(String) + * @see org.eclipse.cbi.p2repo.aggregator.AggregatorPackage#getMavenDependencyMapping_GroupId() + * @model + * @generated + */ + String getGroupId(); + + /** + * Sets the value of the '{@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping#getGroupId Group Id}' attribute. + * + * + * @param value the new value of the 'Group Id' attribute. + * @see #getGroupId() + * @generated + */ + void setGroupId(String value); + + /** + * Returns the value of the 'Artifact Id' attribute. + * + * + * @return the value of the 'Artifact Id' attribute. + * @see #setArtifactId(String) + * @see org.eclipse.cbi.p2repo.aggregator.AggregatorPackage#getMavenDependencyMapping_ArtifactId() + * @model + * @generated + */ + String getArtifactId(); + + /** + * Sets the value of the '{@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping#getArtifactId Artifact Id}' attribute. + * + * + * @param value the new value of the 'Artifact Id' attribute. + * @see #getArtifactId() + * @generated + */ + void setArtifactId(String value); + + /** + * Returns the value of the 'Version Range Pattern' attribute. + * + * + * @return the value of the 'Version Range Pattern' attribute. + * @see #setVersionRangePattern(String) + * @see org.eclipse.cbi.p2repo.aggregator.AggregatorPackage#getMavenDependencyMapping_VersionRangePattern() + * @model + * @generated + */ + String getVersionRangePattern(); + + /** + * Sets the value of the '{@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping#getVersionRangePattern Version Range Pattern}' attribute. + * + * + * @param value the new value of the 'Version Range Pattern' attribute. + * @see #getVersionRangePattern() + * @generated + */ + void setVersionRangePattern(String value); + + /** + * Returns the value of the 'Version Range Template' attribute. + * + * + * @return the value of the 'Version Range Template' attribute. + * @see #setVersionRangeTemplate(String) + * @see org.eclipse.cbi.p2repo.aggregator.AggregatorPackage#getMavenDependencyMapping_VersionRangeTemplate() + * @model + * @generated + */ + String getVersionRangeTemplate(); + + /** + * Sets the value of the '{@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping#getVersionRangeTemplate Version Range Template}' attribute. + * + * + * @param value the new value of the 'Version Range Template' attribute. + * @see #getVersionRangeTemplate() + * @generated + */ + void setVersionRangeTemplate(String value); + + /** + * + * + * @model versionRangeDataType="org.eclipse.cbi.p2repo.p2.VersionRange" + * @generated + */ + MavenDependencyItem map(String iuName, String requirementNamespace, String requirementName, + VersionRange versionRange); + +} // MavenDependencyMapping diff --git a/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/MavenMapping.java b/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/MavenMapping.java index 0ce595b4a..94b282cb0 100644 --- a/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/MavenMapping.java +++ b/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/MavenMapping.java @@ -133,9 +133,11 @@ public interface MavenMapping extends StatusProvider, InfosProvider { * * * @return the value of the 'Snapshot' attribute. + * @see #isSetSnapshot() + * @see #unsetSnapshot() * @see #setSnapshot(boolean) * @see org.eclipse.cbi.p2repo.aggregator.AggregatorPackage#getMavenMapping_Snapshot() - * @model default="false" dataType="org.eclipse.emf.ecore.xml.type.Boolean" required="true" + * @model default="false" unsettable="true" dataType="org.eclipse.emf.ecore.xml.type.Boolean" * @generated */ boolean isSnapshot(); @@ -145,11 +147,38 @@ public interface MavenMapping extends StatusProvider, InfosProvider { * * * @param value the new value of the 'Snapshot' attribute. + * @see #isSetSnapshot() + * @see #unsetSnapshot() * @see #isSnapshot() * @generated */ void setSnapshot(boolean value); + /** + * Unsets the value of the '{@link org.eclipse.cbi.p2repo.aggregator.MavenMapping#isSnapshot Snapshot}' attribute. + * + * @since 1.1.0 + * + * @see #isSetSnapshot() + * @see #isSnapshot() + * @see #setSnapshot(boolean) + * @generated + */ + void unsetSnapshot(); + + /** + * Returns whether the value of the '{@link org.eclipse.cbi.p2repo.aggregator.MavenMapping#isSnapshot Snapshot}' attribute is set. + * + * @since 1.1.0 + * + * @return whether the value of the 'Snapshot' attribute is set. + * @see #unsetSnapshot() + * @see #isSnapshot() + * @see #setSnapshot(boolean) + * @generated + */ + boolean isSetSnapshot(); + /** * * diff --git a/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/impl/AggregationImpl.java b/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/impl/AggregationImpl.java index 7d6914c75..1125d7cf2 100644 --- a/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/impl/AggregationImpl.java +++ b/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/impl/AggregationImpl.java @@ -23,6 +23,7 @@ import org.eclipse.cbi.p2repo.aggregator.Feature; import org.eclipse.cbi.p2repo.aggregator.InfosProvider; import org.eclipse.cbi.p2repo.aggregator.MappedRepository; +import org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping; import org.eclipse.cbi.p2repo.aggregator.MavenMapping; import org.eclipse.cbi.p2repo.aggregator.MetadataRepositoryReference; import org.eclipse.cbi.p2repo.aggregator.PackedStrategy; @@ -74,6 +75,7 @@ *
  • {@link org.eclipse.cbi.p2repo.aggregator.impl.AggregationImpl#getVersionFormat Version Format}
  • *
  • {@link org.eclipse.cbi.p2repo.aggregator.impl.AggregationImpl#getMavenBuildNumber Maven Build Number}
  • *
  • {@link org.eclipse.cbi.p2repo.aggregator.impl.AggregationImpl#getMavenMappings Maven Mappings}
  • + *
  • {@link org.eclipse.cbi.p2repo.aggregator.impl.AggregationImpl#getMavenDependencyMappings Maven Dependency Mappings}
  • *
  • {@link org.eclipse.cbi.p2repo.aggregator.impl.AggregationImpl#isAllowLegacySites Allow Legacy Sites}
  • * * @@ -443,6 +445,17 @@ public class AggregationImpl extends DescriptionProviderImpl implements Aggregat */ protected EList mavenMappings; + /** + * The cached value of the '{@link #getMavenDependencyMappings() Maven Dependency Mappings}' containment reference list. + * + * + * @see #getMavenDependencyMappings() + * @since 1.1.0 + * @generated + * @ordered + */ + protected EList mavenDependencyMappings; + /** * The default value of the '{@link #isAllowLegacySites() Allow Legacy Sites}' attribute. * @@ -608,6 +621,8 @@ public Object eGet(int featureID, boolean resolve, boolean coreType) { return getMavenBuildNumber(); case AggregatorPackage.AGGREGATION__MAVEN_MAPPINGS: return getMavenMappings(); + case AggregatorPackage.AGGREGATION__MAVEN_DEPENDENCY_MAPPINGS: + return getMavenDependencyMappings(); case AggregatorPackage.AGGREGATION__ALLOW_LEGACY_SITES: return isAllowLegacySites(); } @@ -647,6 +662,8 @@ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, return ((InternalEList) getContacts()).basicRemove(otherEnd, msgs); case AggregatorPackage.AGGREGATION__MAVEN_MAPPINGS: return ((InternalEList) getMavenMappings()).basicRemove(otherEnd, msgs); + case AggregatorPackage.AGGREGATION__MAVEN_DEPENDENCY_MAPPINGS: + return ((InternalEList) getMavenDependencyMappings()).basicRemove(otherEnd, msgs); } return super.eInverseRemove(otherEnd, featureID, msgs); } @@ -699,6 +716,8 @@ public boolean eIsSet(int featureID) { return mavenBuildNumber != MAVEN_BUILD_NUMBER_EDEFAULT; case AggregatorPackage.AGGREGATION__MAVEN_MAPPINGS: return mavenMappings != null && !mavenMappings.isEmpty(); + case AggregatorPackage.AGGREGATION__MAVEN_DEPENDENCY_MAPPINGS: + return mavenDependencyMappings != null && !mavenDependencyMappings.isEmpty(); case AggregatorPackage.AGGREGATION__ALLOW_LEGACY_SITES: return ((eFlags & ALLOW_LEGACY_SITES_EFLAG) != 0) != ALLOW_LEGACY_SITES_EDEFAULT; } @@ -779,6 +798,10 @@ public void eSet(int featureID, Object newValue) { getMavenMappings().clear(); getMavenMappings().addAll((Collection) newValue); return; + case AggregatorPackage.AGGREGATION__MAVEN_DEPENDENCY_MAPPINGS: + getMavenDependencyMappings().clear(); + getMavenDependencyMappings().addAll((Collection) newValue); + return; case AggregatorPackage.AGGREGATION__ALLOW_LEGACY_SITES: setAllowLegacySites((Boolean) newValue); return; @@ -861,6 +884,9 @@ public void eUnset(int featureID) { case AggregatorPackage.AGGREGATION__MAVEN_MAPPINGS: getMavenMappings().clear(); return; + case AggregatorPackage.AGGREGATION__MAVEN_DEPENDENCY_MAPPINGS: + getMavenDependencyMappings().clear(); + return; case AggregatorPackage.AGGREGATION__ALLOW_LEGACY_SITES: setAllowLegacySites(ALLOW_LEGACY_SITES_EDEFAULT); return; @@ -1049,6 +1075,21 @@ public EList getMavenMappings() { return mavenMappings; } + /** + * + * + * @since 1.1.0 + * @generated + */ + @Override + public EList getMavenDependencyMappings() { + if (mavenDependencyMappings == null) { + mavenDependencyMappings = new EObjectContainmentEList.Resolving<>( + MavenDependencyMapping.class, this, AggregatorPackage.AGGREGATION__MAVEN_DEPENDENCY_MAPPINGS); + } + return mavenDependencyMappings; + } + /** * * diff --git a/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/impl/AggregatorFactoryImpl.java b/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/impl/AggregatorFactoryImpl.java index 27fcdec2a..2ee9f9885 100644 --- a/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/impl/AggregatorFactoryImpl.java +++ b/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/impl/AggregatorFactoryImpl.java @@ -32,6 +32,8 @@ import org.eclipse.cbi.p2repo.aggregator.MapRule; import org.eclipse.cbi.p2repo.aggregator.MappedRepository; import org.eclipse.cbi.p2repo.aggregator.MappedUnit; +import org.eclipse.cbi.p2repo.aggregator.MavenDependencyItem; +import org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping; import org.eclipse.cbi.p2repo.aggregator.MavenItem; import org.eclipse.cbi.p2repo.aggregator.MavenMapping; import org.eclipse.cbi.p2repo.aggregator.MetadataRepositoryReference; @@ -278,10 +280,14 @@ public EObject create(EClass eClass) { return (EObject) createInfosProvider(); case AggregatorPackage.MAPPED_REPOSITORY: return (EObject) createMappedRepository(); + case AggregatorPackage.MAVEN_DEPENDENCY_ITEM: + return (EObject) createMavenDependencyItem(); case AggregatorPackage.MAVEN_ITEM: return (EObject) createMavenItem(); case AggregatorPackage.MAVEN_MAPPING: return (EObject) createMavenMapping(); + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING: + return (EObject) createMavenDependencyMapping(); case AggregatorPackage.METADATA_REPOSITORY_REFERENCE: return (EObject) createMetadataRepositoryReference(); case AggregatorPackage.PRODUCT: @@ -539,6 +545,18 @@ public MappedRepository createMappedRepository() { return mappedRepository; } + /** + * + * + * @since 1.1.0 + * @generated + */ + @Override + public MavenDependencyItem createMavenDependencyItem() { + MavenDependencyItemImpl mavenDependencyItem = new MavenDependencyItemImpl(); + return mavenDependencyItem; + } + /** * * @generated NOT @@ -627,6 +645,18 @@ public MavenMapping createMavenMapping() { return mavenMapping; } + /** + * + * + * @since 1.1.0 + * @generated + */ + @Override + public MavenDependencyMapping createMavenDependencyMapping() { + MavenDependencyMappingImpl mavenDependencyMapping = new MavenDependencyMappingImpl(); + return mavenDependencyMapping; + } + /** * * diff --git a/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/impl/AggregatorPackageImpl.java b/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/impl/AggregatorPackageImpl.java index bfd78ce5a..cbd4ee816 100644 --- a/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/impl/AggregatorPackageImpl.java +++ b/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/impl/AggregatorPackageImpl.java @@ -37,6 +37,8 @@ import org.eclipse.cbi.p2repo.aggregator.MapRule; import org.eclipse.cbi.p2repo.aggregator.MappedRepository; import org.eclipse.cbi.p2repo.aggregator.MappedUnit; +import org.eclipse.cbi.p2repo.aggregator.MavenDependencyItem; +import org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping; import org.eclipse.cbi.p2repo.aggregator.MavenItem; import org.eclipse.cbi.p2repo.aggregator.MavenMapping; import org.eclipse.cbi.p2repo.aggregator.MetadataRepositoryReference; @@ -228,6 +230,14 @@ public static AggregatorPackage init() { */ private EClass mapRuleEClass = null; + /** + * + * + * @since 1.1.0 + * @generated + */ + private EClass mavenDependencyItemEClass = null; + /** * * @@ -319,6 +329,14 @@ public static AggregatorPackage init() { */ private EClass mavenMappingEClass = null; + /** + * + * + * @since 1.1.0 + * @generated + */ + private EClass mavenDependencyMappingEClass = null; + /** * * @@ -473,6 +491,7 @@ public void createPackageContents() { createEAttribute(aggregationEClass, AGGREGATION__VERSION_FORMAT); createEAttribute(aggregationEClass, AGGREGATION__MAVEN_BUILD_NUMBER); createEReference(aggregationEClass, AGGREGATION__MAVEN_MAPPINGS); + createEReference(aggregationEClass, AGGREGATION__MAVEN_DEPENDENCY_MAPPINGS); createEAttribute(aggregationEClass, AGGREGATION__ALLOW_LEGACY_SITES); availableVersionsHeaderEClass = createEClass(AVAILABLE_VERSIONS_HEADER); @@ -508,6 +527,7 @@ public void createPackageContents() { createEReference(contributionEClass, CONTRIBUTION__REPOSITORIES); createEReference(contributionEClass, CONTRIBUTION__CONTACTS); createEReference(contributionEClass, CONTRIBUTION__MAVEN_MAPPINGS); + createEReference(contributionEClass, CONTRIBUTION__MAVEN_DEPENDENCY_MAPPINGS); featureEClass = createEClass(FEATURE); createEReference(featureEClass, FEATURE__CATEGORIES); @@ -557,6 +577,12 @@ public void createPackageContents() { mapRuleEClass = createEClass(MAP_RULE); + mavenDependencyItemEClass = createEClass(MAVEN_DEPENDENCY_ITEM); + createEAttribute(mavenDependencyItemEClass, MAVEN_DEPENDENCY_ITEM__GROUP_ID); + createEAttribute(mavenDependencyItemEClass, MAVEN_DEPENDENCY_ITEM__ARTIFACT_ID); + createEAttribute(mavenDependencyItemEClass, MAVEN_DEPENDENCY_ITEM__MAPPED_VERSION_RANGE); + createEReference(mavenDependencyItemEClass, MAVEN_DEPENDENCY_ITEM__MAVEN_DEPENDENCY_MAPPING); + mavenItemEClass = createEClass(MAVEN_ITEM); createEAttribute(mavenItemEClass, MAVEN_ITEM__GROUP_ID); createEAttribute(mavenItemEClass, MAVEN_ITEM__ARTIFACT_ID); @@ -572,6 +598,15 @@ public void createPackageContents() { createEAttribute(mavenMappingEClass, MAVEN_MAPPING__VERSION_TEMPLATE); createEAttribute(mavenMappingEClass, MAVEN_MAPPING__SNAPSHOT); + mavenDependencyMappingEClass = createEClass(MAVEN_DEPENDENCY_MAPPING); + createEAttribute(mavenDependencyMappingEClass, MAVEN_DEPENDENCY_MAPPING__IU_NAME_PATTERN); + createEAttribute(mavenDependencyMappingEClass, MAVEN_DEPENDENCY_MAPPING__NAMESPACE_PATTERN); + createEAttribute(mavenDependencyMappingEClass, MAVEN_DEPENDENCY_MAPPING__NAME_PATTERN); + createEAttribute(mavenDependencyMappingEClass, MAVEN_DEPENDENCY_MAPPING__GROUP_ID); + createEAttribute(mavenDependencyMappingEClass, MAVEN_DEPENDENCY_MAPPING__ARTIFACT_ID); + createEAttribute(mavenDependencyMappingEClass, MAVEN_DEPENDENCY_MAPPING__VERSION_RANGE_PATTERN); + createEAttribute(mavenDependencyMappingEClass, MAVEN_DEPENDENCY_MAPPING__VERSION_RANGE_TEMPLATE); + metadataRepositoryReferenceEClass = createEClass(METADATA_REPOSITORY_REFERENCE); createEReference(metadataRepositoryReferenceEClass, METADATA_REPOSITORY_REFERENCE__METADATA_REPOSITORY); createEAttribute(metadataRepositoryReferenceEClass, METADATA_REPOSITORY_REFERENCE__LOCATION); @@ -631,7 +666,7 @@ public EClass getAggregation() { */ @Override public EAttribute getAggregation_AllowLegacySites() { - return (EAttribute) aggregationEClass.getEStructuralFeatures().get(16); + return (EAttribute) aggregationEClass.getEStructuralFeatures().get(17); } /** @@ -714,6 +749,17 @@ public EReference getAggregation_MavenMappings() { return (EReference) aggregationEClass.getEStructuralFeatures().get(15); } + /** + * + * + * @since 1.1.0 + * @generated + */ + @Override + public EReference getAggregation_MavenDependencyMappings() { + return (EReference) aggregationEClass.getEStructuralFeatures().get(16); + } + /** * * @@ -1084,6 +1130,17 @@ public EReference getContribution_MavenMappings() { return (EReference) contributionEClass.getEStructuralFeatures().get(3); } + /** + * + * + * @since 1.1.0 + * @generated + */ + @Override + public EReference getContribution_MavenDependencyMappings() { + return (EReference) contributionEClass.getEStructuralFeatures().get(4); + } + /** * * @@ -1464,6 +1521,61 @@ public EClass getMapRule() { return mapRuleEClass; } + /** + * + * + * @since 1.1.0 + * @generated + */ + @Override + public EClass getMavenDependencyItem() { + return mavenDependencyItemEClass; + } + + /** + * + * + * @since 1.1.0 + * @generated + */ + @Override + public EAttribute getMavenDependencyItem_GroupId() { + return (EAttribute) mavenDependencyItemEClass.getEStructuralFeatures().get(0); + } + + /** + * + * + * @since 1.1.0 + * @generated + */ + @Override + public EAttribute getMavenDependencyItem_ArtifactId() { + return (EAttribute) mavenDependencyItemEClass.getEStructuralFeatures().get(1); + } + + /** + * + * + * @since 1.1.0 + * @generated + */ + @Override + public EAttribute getMavenDependencyItem_MappedVersionRange() { + return (EAttribute) mavenDependencyItemEClass.getEStructuralFeatures().get(2); + } + + /** + * + * + * @since 1.1.0 + * @generated + */ + @Override + public EReference getMavenDependencyItem_MavenDependencyMapping() { + return (EReference) mavenDependencyItemEClass.getEStructuralFeatures().get(3); + } + /** * * @@ -1574,6 +1686,94 @@ public EAttribute getMavenMapping_Snapshot() { return (EAttribute) mavenMappingEClass.getEStructuralFeatures().get(5); } + /** + * + * + * @since 1.1.0 + * @generated + */ + @Override + public EClass getMavenDependencyMapping() { + return mavenDependencyMappingEClass; + } + + /** + * + * + * @since 1.1.0 + * @generated + */ + @Override + public EAttribute getMavenDependencyMapping_IuNamePattern() { + return (EAttribute) mavenDependencyMappingEClass.getEStructuralFeatures().get(0); + } + + /** + * + * + * @since 1.1.0 + * @generated + */ + @Override + public EAttribute getMavenDependencyMapping_NamespacePattern() { + return (EAttribute) mavenDependencyMappingEClass.getEStructuralFeatures().get(1); + } + + /** + * + * + * @since 1.1.0 + * @generated + */ + @Override + public EAttribute getMavenDependencyMapping_NamePattern() { + return (EAttribute) mavenDependencyMappingEClass.getEStructuralFeatures().get(2); + } + + /** + * + * + * @since 1.1.0 + * @generated + */ + @Override + public EAttribute getMavenDependencyMapping_GroupId() { + return (EAttribute) mavenDependencyMappingEClass.getEStructuralFeatures().get(3); + } + + /** + * + * + * @since 1.1.0 + * @generated + */ + @Override + public EAttribute getMavenDependencyMapping_ArtifactId() { + return (EAttribute) mavenDependencyMappingEClass.getEStructuralFeatures().get(4); + } + + /** + * + * + * @since 1.1.0 + * @generated + */ + @Override + public EAttribute getMavenDependencyMapping_VersionRangePattern() { + return (EAttribute) mavenDependencyMappingEClass.getEStructuralFeatures().get(5); + } + + /** + * + * + * @since 1.1.0 + * @generated + */ + @Override + public EAttribute getMavenDependencyMapping_VersionRangeTemplate() { + return (EAttribute) mavenDependencyMappingEClass.getEStructuralFeatures().get(6); + } + /** * * @@ -1939,6 +2139,8 @@ public void initializePackageContents() { mapRuleEClass.getESuperTypes().add(this.getEnabledStatusProvider()); mavenMappingEClass.getESuperTypes().add(this.getStatusProvider()); mavenMappingEClass.getESuperTypes().add(this.getInfosProvider()); + mavenDependencyMappingEClass.getESuperTypes().add(this.getStatusProvider()); + mavenDependencyMappingEClass.getESuperTypes().add(this.getInfosProvider()); metadataRepositoryReferenceEClass.getESuperTypes().add(this.getEnabledStatusProvider()); metadataRepositoryReferenceEClass.getESuperTypes().add(this.getStatusProvider()); metadataRepositoryReferenceEClass.getESuperTypes().add(this.getInfosProvider()); @@ -2007,6 +2209,9 @@ public void initializePackageContents() { initEReference(getAggregation_MavenMappings(), this.getMavenMapping(), null, "mavenMappings", null, 0, -1, Aggregation.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + initEReference(getAggregation_MavenDependencyMappings(), this.getMavenDependencyMapping(), null, + "mavenDependencyMappings", null, 0, -1, Aggregation.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, + IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); initEAttribute(getAggregation_AllowLegacySites(), theXMLTypePackage.getBoolean(), "allowLegacySites", "true", 0, 1, Aggregation.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); @@ -2105,6 +2310,9 @@ public void initializePackageContents() { initEReference(getContribution_MavenMappings(), this.getMavenMapping(), null, "mavenMappings", null, 0, -1, Contribution.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + initEReference(getContribution_MavenDependencyMappings(), this.getMavenDependencyMapping(), null, + "mavenDependencyMappings", null, 0, -1, Contribution.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, + IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); op = addEOperation(contributionEClass, this.getMappedRepository(), "getRepositories", 0, -1, IS_UNIQUE, IS_ORDERED); @@ -2112,6 +2320,9 @@ public void initializePackageContents() { addEOperation(contributionEClass, this.getMavenMapping(), "getAllMavenMappings", 0, -1, IS_UNIQUE, IS_ORDERED); + addEOperation(contributionEClass, this.getMavenDependencyMapping(), "getAllMavenDependencyMappings", 0, -1, + IS_UNIQUE, IS_ORDERED); + initEClass(featureEClass, Feature.class, "Feature", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); initEReference(getFeature_Categories(), this.getCustomCategory(), this.getCustomCategory_Features(), "categories", null, 0, -1, Feature.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, @@ -2257,6 +2468,21 @@ public void initializePackageContents() { initEClass(mapRuleEClass, MapRule.class, "MapRule", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + initEClass(mavenDependencyItemEClass, MavenDependencyItem.class, "MavenDependencyItem", !IS_ABSTRACT, + !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + initEAttribute(getMavenDependencyItem_GroupId(), theXMLTypePackage.getString(), "groupId", null, 0, 1, + MavenDependencyItem.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, + IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + initEAttribute(getMavenDependencyItem_ArtifactId(), ecorePackage.getEString(), "artifactId", null, 0, 1, + MavenDependencyItem.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, + IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + initEAttribute(getMavenDependencyItem_MappedVersionRange(), ecorePackage.getEString(), "mappedVersionRange", + null, 0, 1, MavenDependencyItem.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, + !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + initEReference(getMavenDependencyItem_MavenDependencyMapping(), this.getMavenDependencyMapping(), null, + "mavenDependencyMapping", null, 0, 1, MavenDependencyItem.class, !IS_TRANSIENT, !IS_VOLATILE, + IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + initEClass(mavenItemEClass, MavenItem.class, "MavenItem", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); initEAttribute(getMavenItem_GroupId(), theXMLTypePackage.getString(), "groupId", null, 0, 1, MavenItem.class, @@ -2290,8 +2516,8 @@ public void initializePackageContents() { initEAttribute(getMavenMapping_VersionTemplate(), ecorePackage.getEString(), "versionTemplate", null, 0, 1, MavenMapping.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); - initEAttribute(getMavenMapping_Snapshot(), theXMLTypePackage.getBoolean(), "snapshot", "false", 1, 1, - MavenMapping.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, + initEAttribute(getMavenMapping_Snapshot(), theXMLTypePackage.getBoolean(), "snapshot", "false", 0, 1, + MavenMapping.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); op = addEOperation(mavenMappingEClass, this.getMavenItem(), "map", 0, 1, IS_UNIQUE, IS_ORDERED); @@ -2301,6 +2527,37 @@ public void initializePackageContents() { op = addEOperation(mavenMappingEClass, ecorePackage.getEString(), "mapVersion", 0, 1, IS_UNIQUE, IS_ORDERED); addEParameter(op, theP2Package.getVersion(), "version", 0, 1, IS_UNIQUE, IS_ORDERED); + initEClass(mavenDependencyMappingEClass, MavenDependencyMapping.class, "MavenDependencyMapping", !IS_ABSTRACT, + !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); + initEAttribute(getMavenDependencyMapping_IuNamePattern(), ecorePackage.getEString(), "iuNamePattern", null, 0, + 1, MavenDependencyMapping.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, + IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + initEAttribute(getMavenDependencyMapping_NamespacePattern(), ecorePackage.getEString(), "namespacePattern", + null, 0, 1, MavenDependencyMapping.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, + !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + initEAttribute(getMavenDependencyMapping_NamePattern(), ecorePackage.getEString(), "namePattern", null, 0, 1, + MavenDependencyMapping.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, + IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + initEAttribute(getMavenDependencyMapping_GroupId(), ecorePackage.getEString(), "groupId", null, 0, 1, + MavenDependencyMapping.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, + IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + initEAttribute(getMavenDependencyMapping_ArtifactId(), ecorePackage.getEString(), "artifactId", null, 0, 1, + MavenDependencyMapping.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, + IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + initEAttribute(getMavenDependencyMapping_VersionRangePattern(), ecorePackage.getEString(), + "versionRangePattern", null, 0, 1, MavenDependencyMapping.class, !IS_TRANSIENT, !IS_VOLATILE, + IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + initEAttribute(getMavenDependencyMapping_VersionRangeTemplate(), ecorePackage.getEString(), + "versionRangeTemplate", null, 0, 1, MavenDependencyMapping.class, !IS_TRANSIENT, !IS_VOLATILE, + IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED); + + op = addEOperation(mavenDependencyMappingEClass, this.getMavenDependencyItem(), "map", 0, 1, IS_UNIQUE, + IS_ORDERED); + addEParameter(op, ecorePackage.getEString(), "iuName", 0, 1, IS_UNIQUE, IS_ORDERED); + addEParameter(op, ecorePackage.getEString(), "requirementNamespace", 0, 1, IS_UNIQUE, IS_ORDERED); + addEParameter(op, ecorePackage.getEString(), "requirementName", 0, 1, IS_UNIQUE, IS_ORDERED); + addEParameter(op, theP2Package.getVersionRange(), "versionRange", 0, 1, IS_UNIQUE, IS_ORDERED); + initEClass(metadataRepositoryReferenceEClass, MetadataRepositoryReference.class, "MetadataRepositoryReference", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); initEReference(getMetadataRepositoryReference_MetadataRepository(), theP2Package.getMetadataRepository(), null, @@ -2473,6 +2730,24 @@ public void initializePackageContents() { // Create resource createResource(eNS_URI); + + // Create annotations + // http:///org/eclipse/emf/ecore/util/ExtendedMetaData + createExtendedMetaDataAnnotations(); + } + + /** + * Initializes the annotations for http:///org/eclipse/emf/ecore/util/ExtendedMetaData. + * + * + * @generated + */ + protected void createExtendedMetaDataAnnotations() { + String source = "http:///org/eclipse/emf/ecore/util/ExtendedMetaData"; + addAnnotation(getAggregation_MavenDependencyMappings(), source, + new String[] { "name", "mavenDependencyMapping" }); + addAnnotation(getContribution_MavenDependencyMappings(), source, + new String[] { "name", "mavenDependencyMapping" }); } } // AggregatorPackageImpl diff --git a/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/impl/ContributionImpl.java b/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/impl/ContributionImpl.java index 0a74cef82..9682a9358 100644 --- a/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/impl/ContributionImpl.java +++ b/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/impl/ContributionImpl.java @@ -20,6 +20,7 @@ import org.eclipse.cbi.p2repo.aggregator.IdentificationProvider; import org.eclipse.cbi.p2repo.aggregator.InfosProvider; import org.eclipse.cbi.p2repo.aggregator.MappedRepository; +import org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping; import org.eclipse.cbi.p2repo.aggregator.MavenMapping; import org.eclipse.cbi.p2repo.aggregator.Status; import org.eclipse.cbi.p2repo.aggregator.StatusCode; @@ -57,6 +58,7 @@ *
  • {@link org.eclipse.cbi.p2repo.aggregator.impl.ContributionImpl#getRepositories Repositories}
  • *
  • {@link org.eclipse.cbi.p2repo.aggregator.impl.ContributionImpl#getContacts Contacts}
  • *
  • {@link org.eclipse.cbi.p2repo.aggregator.impl.ContributionImpl#getMavenMappings Maven Mappings}
  • + *
  • {@link org.eclipse.cbi.p2repo.aggregator.impl.ContributionImpl#getMavenDependencyMappings Maven Dependency Mappings}
  • * * * @generated @@ -201,6 +203,17 @@ public class ContributionImpl extends MinimalEObjectImpl.Container implements Co */ protected EList mavenMappings; + /** + * The cached value of the '{@link #getMavenDependencyMappings() Maven Dependency Mappings}' containment reference list. + * + * + * @see #getMavenDependencyMappings() + * @since 1.1.0 + * @generated + * @ordered + */ + protected EList mavenDependencyMappings; + private Status status; /** @@ -331,6 +344,8 @@ public Object eGet(int featureID, boolean resolve, boolean coreType) { return getContacts(); case AggregatorPackage.CONTRIBUTION__MAVEN_MAPPINGS: return getMavenMappings(); + case AggregatorPackage.CONTRIBUTION__MAVEN_DEPENDENCY_MAPPINGS: + return getMavenDependencyMappings(); } return super.eGet(featureID, resolve, coreType); } @@ -347,6 +362,8 @@ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, return ((InternalEList) getRepositories()).basicRemove(otherEnd, msgs); case AggregatorPackage.CONTRIBUTION__MAVEN_MAPPINGS: return ((InternalEList) getMavenMappings()).basicRemove(otherEnd, msgs); + case AggregatorPackage.CONTRIBUTION__MAVEN_DEPENDENCY_MAPPINGS: + return ((InternalEList) getMavenDependencyMappings()).basicRemove(otherEnd, msgs); } return super.eInverseRemove(otherEnd, featureID, msgs); } @@ -381,6 +398,8 @@ public boolean eIsSet(int featureID) { return contacts != null && !contacts.isEmpty(); case AggregatorPackage.CONTRIBUTION__MAVEN_MAPPINGS: return mavenMappings != null && !mavenMappings.isEmpty(); + case AggregatorPackage.CONTRIBUTION__MAVEN_DEPENDENCY_MAPPINGS: + return mavenDependencyMappings != null && !mavenDependencyMappings.isEmpty(); } return super.eIsSet(featureID); } @@ -427,6 +446,10 @@ public void eSet(int featureID, Object newValue) { getMavenMappings().clear(); getMavenMappings().addAll((Collection) newValue); return; + case AggregatorPackage.CONTRIBUTION__MAVEN_DEPENDENCY_MAPPINGS: + getMavenDependencyMappings().clear(); + getMavenDependencyMappings().addAll((Collection) newValue); + return; } super.eSet(featureID, newValue); } @@ -476,6 +499,9 @@ public void eUnset(int featureID) { case AggregatorPackage.CONTRIBUTION__MAVEN_MAPPINGS: getMavenMappings().clear(); return; + case AggregatorPackage.CONTRIBUTION__MAVEN_DEPENDENCY_MAPPINGS: + getMavenDependencyMappings().clear(); + return; } super.eUnset(featureID); } @@ -495,6 +521,21 @@ public EList getAllMavenMappings() { return allMappings; } + /** + * + * + * @generated NOT + */ + @Override + public EList getAllMavenDependencyMappings() { + EList myMappings = getMavenDependencyMappings(); + EList parentMappings = GeneralUtils.getAggregation(this).getMavenDependencyMappings(); + EList allMappings = new BasicEList<>(myMappings.size() + parentMappings.size()); + allMappings.addAll(myMappings); + allMappings.addAll(parentMappings); + return allMappings; + } + /** * * @@ -578,6 +619,21 @@ public EList getMavenMappings() { return mavenMappings; } + /** + * + * + * @since 1.1.0 + * @generated + */ + @Override + public EList getMavenDependencyMappings() { + if (mavenDependencyMappings == null) { + mavenDependencyMappings = new EObjectContainmentEList.Resolving<>( + MavenDependencyMapping.class, this, AggregatorPackage.CONTRIBUTION__MAVEN_DEPENDENCY_MAPPINGS); + } + return mavenDependencyMappings; + } + /** * * diff --git a/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/impl/MavenDependencyItemImpl.java b/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/impl/MavenDependencyItemImpl.java new file mode 100644 index 000000000..4de5b4750 --- /dev/null +++ b/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/impl/MavenDependencyItemImpl.java @@ -0,0 +1,368 @@ +/** + * Copyright (c) 2022 Eclipse Foundation and others. + * + * 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 + */ +package org.eclipse.cbi.p2repo.aggregator.impl; + +import org.eclipse.cbi.p2repo.aggregator.AggregatorPackage; +import org.eclipse.cbi.p2repo.aggregator.MavenDependencyItem; +import org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping; +import org.eclipse.emf.common.notify.Notification; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.InternalEObject; +import org.eclipse.emf.ecore.impl.ENotificationImpl; +import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; + +/** + * + * An implementation of the model object 'Maven Dependency Item'. + * + *

    + * The following features are implemented: + *

    + *
      + *
    • {@link org.eclipse.cbi.p2repo.aggregator.impl.MavenDependencyItemImpl#getGroupId Group Id}
    • + *
    • {@link org.eclipse.cbi.p2repo.aggregator.impl.MavenDependencyItemImpl#getArtifactId Artifact Id}
    • + *
    • {@link org.eclipse.cbi.p2repo.aggregator.impl.MavenDependencyItemImpl#getMappedVersionRange Mapped Version Range}
    • + *
    • {@link org.eclipse.cbi.p2repo.aggregator.impl.MavenDependencyItemImpl#getMavenDependencyMapping Maven Dependency Mapping}
    • + *
    + * + * @since 1.1.0 + * @generated + */ +public class MavenDependencyItemImpl extends MinimalEObjectImpl.Container implements MavenDependencyItem { + /** + * A set of bit flags representing the values of boolean attributes and whether unsettable features have been set. + * + * + * @generated + * @ordered + */ + protected int eFlags = 0; + + /** + * The default value of the '{@link #getGroupId() Group Id}' attribute. + * + * + * @see #getGroupId() + * @generated + * @ordered + */ + protected static final String GROUP_ID_EDEFAULT = null; + + /** + * The cached value of the '{@link #getGroupId() Group Id}' attribute. + * + * + * @see #getGroupId() + * @generated + * @ordered + */ + protected String groupId = GROUP_ID_EDEFAULT; + + /** + * The default value of the '{@link #getArtifactId() Artifact Id}' attribute. + * + * + * @see #getArtifactId() + * @generated + * @ordered + */ + protected static final String ARTIFACT_ID_EDEFAULT = null; + + /** + * The cached value of the '{@link #getArtifactId() Artifact Id}' attribute. + * + * + * @see #getArtifactId() + * @generated + * @ordered + */ + protected String artifactId = ARTIFACT_ID_EDEFAULT; + + /** + * The default value of the '{@link #getMappedVersionRange() Mapped Version Range}' attribute. + * + * + * @see #getMappedVersionRange() + * @generated + * @ordered + */ + protected static final String MAPPED_VERSION_RANGE_EDEFAULT = null; + + /** + * The cached value of the '{@link #getMappedVersionRange() Mapped Version Range}' attribute. + * + * + * @see #getMappedVersionRange() + * @generated + * @ordered + */ + protected String mappedVersionRange = MAPPED_VERSION_RANGE_EDEFAULT; + + /** + * The cached value of the '{@link #getMavenDependencyMapping() Maven Dependency Mapping}' reference. + * + * + * @see #getMavenDependencyMapping() + * @generated + * @ordered + */ + protected MavenDependencyMapping mavenDependencyMapping; + + /** + * + * + * @generated + */ + protected MavenDependencyItemImpl() { + super(); + } + + /** + * + * + * @generated + */ + @Override + protected EClass eStaticClass() { + return AggregatorPackage.Literals.MAVEN_DEPENDENCY_ITEM; + } + + /** + * + * + * @generated + */ + @Override + public String getGroupId() { + return groupId; + } + + /** + * + * + * @generated + */ + @Override + public void setGroupId(String newGroupId) { + String oldGroupId = groupId; + groupId = newGroupId; + if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, AggregatorPackage.MAVEN_DEPENDENCY_ITEM__GROUP_ID, + oldGroupId, groupId)); + } + + /** + * + * + * @generated + */ + @Override + public String getArtifactId() { + return artifactId; + } + + /** + * + * + * @generated + */ + @Override + public void setArtifactId(String newArtifactId) { + String oldArtifactId = artifactId; + artifactId = newArtifactId; + if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, AggregatorPackage.MAVEN_DEPENDENCY_ITEM__ARTIFACT_ID, + oldArtifactId, artifactId)); + } + + /** + * + * + * @generated + */ + @Override + public String getMappedVersionRange() { + return mappedVersionRange; + } + + /** + * + * + * @generated + */ + @Override + public void setMappedVersionRange(String newMappedVersionRange) { + String oldMappedVersionRange = mappedVersionRange; + mappedVersionRange = newMappedVersionRange; + if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, + AggregatorPackage.MAVEN_DEPENDENCY_ITEM__MAPPED_VERSION_RANGE, oldMappedVersionRange, + mappedVersionRange)); + } + + /** + * + * + * @generated + */ + @Override + public MavenDependencyMapping getMavenDependencyMapping() { + if (mavenDependencyMapping != null && ((EObject) mavenDependencyMapping).eIsProxy()) { + InternalEObject oldMavenDependencyMapping = (InternalEObject) mavenDependencyMapping; + mavenDependencyMapping = (MavenDependencyMapping) eResolveProxy(oldMavenDependencyMapping); + if (mavenDependencyMapping != oldMavenDependencyMapping) { + if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.RESOLVE, + AggregatorPackage.MAVEN_DEPENDENCY_ITEM__MAVEN_DEPENDENCY_MAPPING, + oldMavenDependencyMapping, mavenDependencyMapping)); + } + } + return mavenDependencyMapping; + } + + /** + * + * + * @generated + */ + public MavenDependencyMapping basicGetMavenDependencyMapping() { + return mavenDependencyMapping; + } + + /** + * + * + * @generated + */ + @Override + public void setMavenDependencyMapping(MavenDependencyMapping newMavenDependencyMapping) { + MavenDependencyMapping oldMavenDependencyMapping = mavenDependencyMapping; + mavenDependencyMapping = newMavenDependencyMapping; + if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, + AggregatorPackage.MAVEN_DEPENDENCY_ITEM__MAVEN_DEPENDENCY_MAPPING, oldMavenDependencyMapping, + mavenDependencyMapping)); + } + + /** + * + * + * @generated + */ + @Override + public Object eGet(int featureID, boolean resolve, boolean coreType) { + switch (featureID) { + case AggregatorPackage.MAVEN_DEPENDENCY_ITEM__GROUP_ID: + return getGroupId(); + case AggregatorPackage.MAVEN_DEPENDENCY_ITEM__ARTIFACT_ID: + return getArtifactId(); + case AggregatorPackage.MAVEN_DEPENDENCY_ITEM__MAPPED_VERSION_RANGE: + return getMappedVersionRange(); + case AggregatorPackage.MAVEN_DEPENDENCY_ITEM__MAVEN_DEPENDENCY_MAPPING: + if (resolve) + return getMavenDependencyMapping(); + return basicGetMavenDependencyMapping(); + } + return super.eGet(featureID, resolve, coreType); + } + + /** + * + * + * @generated + */ + @Override + public void eSet(int featureID, Object newValue) { + switch (featureID) { + case AggregatorPackage.MAVEN_DEPENDENCY_ITEM__GROUP_ID: + setGroupId((String) newValue); + return; + case AggregatorPackage.MAVEN_DEPENDENCY_ITEM__ARTIFACT_ID: + setArtifactId((String) newValue); + return; + case AggregatorPackage.MAVEN_DEPENDENCY_ITEM__MAPPED_VERSION_RANGE: + setMappedVersionRange((String) newValue); + return; + case AggregatorPackage.MAVEN_DEPENDENCY_ITEM__MAVEN_DEPENDENCY_MAPPING: + setMavenDependencyMapping((MavenDependencyMapping) newValue); + return; + } + super.eSet(featureID, newValue); + } + + /** + * + * + * @generated + */ + @Override + public void eUnset(int featureID) { + switch (featureID) { + case AggregatorPackage.MAVEN_DEPENDENCY_ITEM__GROUP_ID: + setGroupId(GROUP_ID_EDEFAULT); + return; + case AggregatorPackage.MAVEN_DEPENDENCY_ITEM__ARTIFACT_ID: + setArtifactId(ARTIFACT_ID_EDEFAULT); + return; + case AggregatorPackage.MAVEN_DEPENDENCY_ITEM__MAPPED_VERSION_RANGE: + setMappedVersionRange(MAPPED_VERSION_RANGE_EDEFAULT); + return; + case AggregatorPackage.MAVEN_DEPENDENCY_ITEM__MAVEN_DEPENDENCY_MAPPING: + setMavenDependencyMapping((MavenDependencyMapping) null); + return; + } + super.eUnset(featureID); + } + + /** + * + * + * @generated + */ + @Override + public boolean eIsSet(int featureID) { + switch (featureID) { + case AggregatorPackage.MAVEN_DEPENDENCY_ITEM__GROUP_ID: + return GROUP_ID_EDEFAULT == null ? groupId != null : !GROUP_ID_EDEFAULT.equals(groupId); + case AggregatorPackage.MAVEN_DEPENDENCY_ITEM__ARTIFACT_ID: + return ARTIFACT_ID_EDEFAULT == null ? artifactId != null : !ARTIFACT_ID_EDEFAULT.equals(artifactId); + case AggregatorPackage.MAVEN_DEPENDENCY_ITEM__MAPPED_VERSION_RANGE: + return MAPPED_VERSION_RANGE_EDEFAULT == null ? mappedVersionRange != null + : !MAPPED_VERSION_RANGE_EDEFAULT.equals(mappedVersionRange); + case AggregatorPackage.MAVEN_DEPENDENCY_ITEM__MAVEN_DEPENDENCY_MAPPING: + return mavenDependencyMapping != null; + } + return super.eIsSet(featureID); + } + + /** + * + * + * @generated + */ + @Override + public String toString() { + if (eIsProxy()) + return super.toString(); + + StringBuilder result = new StringBuilder(super.toString()); + result.append(" (groupId: "); + result.append(groupId); + result.append(", artifactId: "); + result.append(artifactId); + result.append(", mappedVersionRange: "); + result.append(mappedVersionRange); + result.append(')'); + return result.toString(); + } + +} //MavenDependencyItemImpl diff --git a/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/impl/MavenDependencyMappingImpl.java b/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/impl/MavenDependencyMappingImpl.java new file mode 100644 index 000000000..c338fd3d9 --- /dev/null +++ b/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/impl/MavenDependencyMappingImpl.java @@ -0,0 +1,848 @@ +/** + * Copyright (c) 2022 Eclipse Foundation and others. + * + * 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 + */ +package org.eclipse.cbi.p2repo.aggregator.impl; + +import java.util.Collection; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.regex.PatternSyntaxException; + +import org.eclipse.cbi.p2repo.aggregator.AggregatorFactory; +import org.eclipse.cbi.p2repo.aggregator.AggregatorPackage; +import org.eclipse.cbi.p2repo.aggregator.InfosProvider; +import org.eclipse.cbi.p2repo.aggregator.MavenDependencyItem; +import org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping; +import org.eclipse.cbi.p2repo.aggregator.Status; +import org.eclipse.cbi.p2repo.aggregator.StatusCode; +import org.eclipse.cbi.p2repo.util.StringUtils; +import org.eclipse.emf.common.notify.Notification; +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.impl.ENotificationImpl; +import org.eclipse.emf.ecore.impl.MinimalEObjectImpl; +import org.eclipse.emf.ecore.util.EDataTypeUniqueEList; +import org.eclipse.equinox.p2.metadata.VersionRange; + +/** + * + * An implementation of the model object 'Maven Dependency Mapping'. + * + *

    + * The following features are implemented: + *

    + *
      + *
    • {@link org.eclipse.cbi.p2repo.aggregator.impl.MavenDependencyMappingImpl#getStatus Status}
    • + *
    • {@link org.eclipse.cbi.p2repo.aggregator.impl.MavenDependencyMappingImpl#getErrors Errors}
    • + *
    • {@link org.eclipse.cbi.p2repo.aggregator.impl.MavenDependencyMappingImpl#getWarnings Warnings}
    • + *
    • {@link org.eclipse.cbi.p2repo.aggregator.impl.MavenDependencyMappingImpl#getInfos Infos}
    • + *
    • {@link org.eclipse.cbi.p2repo.aggregator.impl.MavenDependencyMappingImpl#getIuNamePattern Iu Name Pattern}
    • + *
    • {@link org.eclipse.cbi.p2repo.aggregator.impl.MavenDependencyMappingImpl#getNamespacePattern Namespace Pattern}
    • + *
    • {@link org.eclipse.cbi.p2repo.aggregator.impl.MavenDependencyMappingImpl#getNamePattern Name Pattern}
    • + *
    • {@link org.eclipse.cbi.p2repo.aggregator.impl.MavenDependencyMappingImpl#getGroupId Group Id}
    • + *
    • {@link org.eclipse.cbi.p2repo.aggregator.impl.MavenDependencyMappingImpl#getArtifactId Artifact Id}
    • + *
    • {@link org.eclipse.cbi.p2repo.aggregator.impl.MavenDependencyMappingImpl#getVersionRangePattern Version Range Pattern}
    • + *
    • {@link org.eclipse.cbi.p2repo.aggregator.impl.MavenDependencyMappingImpl#getVersionRangeTemplate Version Range Template}
    • + *
    + * + * @since 1.1.0 + * @generated + */ +public class MavenDependencyMappingImpl extends MinimalEObjectImpl.Container implements MavenDependencyMapping { + + private Pattern compiledIUNamePattern; + + private Pattern compiledNamespacePattern; + + private Pattern compiledNamePattern; + + private Pattern compiledVersionRangePattern; + + /** + * A set of bit flags representing the values of boolean attributes and whether unsettable features have been set. + * + * + * @generated + * @ordered + */ + protected int eFlags = 0; + + /** + * The cached value of the '{@link #getErrors() Errors}' attribute list. + * + * + * @see #getErrors() + * @generated + * @ordered + */ + protected EList errors; + + /** + * The cached value of the '{@link #getWarnings() Warnings}' attribute list. + * + * + * @see #getWarnings() + * @generated + * @ordered + */ + protected EList warnings; + + /** + * The cached value of the '{@link #getInfos() Infos}' attribute list. + * + * + * @see #getInfos() + * @generated + * @ordered + */ + protected EList infos; + + /** + * The default value of the '{@link #getIuNamePattern() Iu Name Pattern}' attribute. + * + * + * @see #getIuNamePattern() + * @generated + * @ordered + */ + protected static final String IU_NAME_PATTERN_EDEFAULT = null; + + /** + * The cached value of the '{@link #getIuNamePattern() Iu Name Pattern}' attribute. + * + * + * @see #getIuNamePattern() + * @generated + * @ordered + */ + protected String iuNamePattern = IU_NAME_PATTERN_EDEFAULT; + + /** + * The default value of the '{@link #getNamespacePattern() Namespace Pattern}' attribute. + * + * + * @see #getNamespacePattern() + * @generated + * @ordered + */ + protected static final String NAMESPACE_PATTERN_EDEFAULT = null; + + /** + * The cached value of the '{@link #getNamespacePattern() Namespace Pattern}' attribute. + * + * + * @see #getNamespacePattern() + * @generated + * @ordered + */ + protected String namespacePattern = NAMESPACE_PATTERN_EDEFAULT; + + /** + * The default value of the '{@link #getNamePattern() Name Pattern}' attribute. + * + * + * @see #getNamePattern() + * @generated + * @ordered + */ + protected static final String NAME_PATTERN_EDEFAULT = null; + + /** + * The cached value of the '{@link #getNamePattern() Name Pattern}' attribute. + * + * + * @see #getNamePattern() + * @generated + * @ordered + */ + protected String namePattern = NAME_PATTERN_EDEFAULT; + + /** + * The default value of the '{@link #getGroupId() Group Id}' attribute. + * + * + * @see #getGroupId() + * @generated + * @ordered + */ + protected static final String GROUP_ID_EDEFAULT = null; + + /** + * The cached value of the '{@link #getGroupId() Group Id}' attribute. + * + * + * @see #getGroupId() + * @generated + * @ordered + */ + protected String groupId = GROUP_ID_EDEFAULT; + + /** + * The default value of the '{@link #getArtifactId() Artifact Id}' attribute. + * + * + * @see #getArtifactId() + * @generated + * @ordered + */ + protected static final String ARTIFACT_ID_EDEFAULT = null; + + /** + * The cached value of the '{@link #getArtifactId() Artifact Id}' attribute. + * + * + * @see #getArtifactId() + * @generated + * @ordered + */ + protected String artifactId = ARTIFACT_ID_EDEFAULT; + + /** + * The default value of the '{@link #getVersionRangePattern() Version Range Pattern}' attribute. + * + * + * @see #getVersionRangePattern() + * @generated + * @ordered + */ + protected static final String VERSION_RANGE_PATTERN_EDEFAULT = null; + + /** + * The cached value of the '{@link #getVersionRangePattern() Version Range Pattern}' attribute. + * + * + * @see #getVersionRangePattern() + * @generated + * @ordered + */ + protected String versionRangePattern = VERSION_RANGE_PATTERN_EDEFAULT; + + /** + * The default value of the '{@link #getVersionRangeTemplate() Version Range Template}' attribute. + * + * + * @see #getVersionRangeTemplate() + * @generated + * @ordered + */ + protected static final String VERSION_RANGE_TEMPLATE_EDEFAULT = null; + + /** + * The cached value of the '{@link #getVersionRangeTemplate() Version Range Template}' attribute. + * + * + * @see #getVersionRangeTemplate() + * @generated + * @ordered + */ + protected String versionRangeTemplate = VERSION_RANGE_TEMPLATE_EDEFAULT; + + /** + * + * + * @generated + */ + protected MavenDependencyMappingImpl() { + super(); + } + + /** + * + * + * @generated + */ + @Override + protected EClass eStaticClass() { + return AggregatorPackage.Literals.MAVEN_DEPENDENCY_MAPPING; + } + + /** + * @generated NOT + */ + @Override + public Status getStatus() { + try { + String iuNamePattern = StringUtils.trimmedOrNull(getIuNamePattern()); + if (iuNamePattern != null) { + compiledNamespacePattern = Pattern.compile(iuNamePattern); + } + + String namespacePattern = StringUtils.trimmedOrNull(getNamespacePattern()); + String namePattern = StringUtils.trimmedOrNull(getNamePattern()); + if (namePattern == null || namespacePattern == null || StringUtils.trimmedOrNull(getGroupId()) == null + || StringUtils.trimmedOrNull(getArtifactId()) == null) { + return AggregatorFactory.eINSTANCE.createStatus(StatusCode.BROKEN, "Incomplete"); + } + + compiledNamespacePattern = Pattern.compile(namespacePattern); + + compiledNamePattern = Pattern.compile(namePattern); + MavenMappingImpl.checkReplacements(compiledNamePattern, getGroupId(), getArtifactId()); + + String versionRangePattern = StringUtils.trimmedOrNull(getVersionRangePattern()); + if (versionRangePattern != null) { + compiledVersionRangePattern = Pattern.compile(versionRangePattern); + String versionRangeTemplate = getVersionRangeTemplate(); + if (versionRangeTemplate != null) { + MavenMappingImpl.checkReplacements(compiledVersionRangePattern, versionRangeTemplate); + } + } + + return AggregatorFactory.eINSTANCE.createStatus(StatusCode.OK); + } catch (PatternSyntaxException e) { + return AggregatorFactory.eINSTANCE.createStatus(StatusCode.BROKEN, e.getMessage()); + } catch (IndexOutOfBoundsException e) { + return AggregatorFactory.eINSTANCE.createStatus(StatusCode.BROKEN, e.getMessage()); + } catch (IllegalArgumentException e) { + return AggregatorFactory.eINSTANCE.createStatus(StatusCode.BROKEN, e.getMessage()); + } + } + + /** + * + * + * @generated + */ + @Override + public EList getErrors() { + if (errors == null) { + errors = new EDataTypeUniqueEList<>(String.class, this, + AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__ERRORS); + } + return errors; + } + + /** + * + * + * @generated + */ + @Override + public EList getWarnings() { + if (warnings == null) { + warnings = new EDataTypeUniqueEList<>(String.class, this, + AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__WARNINGS); + } + return warnings; + } + + /** + * + * + * @generated + */ + @Override + public EList getInfos() { + if (infos == null) { + infos = new EDataTypeUniqueEList<>(String.class, this, + AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__INFOS); + } + return infos; + } + + /** + * + * + * @generated + */ + @Override + public String getIuNamePattern() { + return iuNamePattern; + } + + /** + * + * + * @generated + */ + public void setIuNamePatternGen(String newIuNamePattern) { + String oldIuNamePattern = iuNamePattern; + iuNamePattern = newIuNamePattern; + if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, + AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__IU_NAME_PATTERN, oldIuNamePattern, iuNamePattern)); + } + + @Override + public void setIuNamePattern(String newIuNamePattern) { + setIuNamePatternGen(newIuNamePattern); + newIuNamePattern = StringUtils.trimmedOrNull(newIuNamePattern); + if (newIuNamePattern != null) { + try { + compiledIUNamePattern = Pattern.compile(StringUtils.trimmedOrNull(newIuNamePattern)); + } catch (PatternSyntaxException e) { + // ignore + } + } else { + compiledIUNamePattern = null; + + } + } + + /** + * + * + * @generated + */ + @Override + public String getNamespacePattern() { + return namespacePattern; + } + + /** + * + * + * @generated + */ + public void setNamespacePatternGen(String newNamespacePattern) { + String oldNamespacePattern = namespacePattern; + namespacePattern = newNamespacePattern; + if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, + AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__NAMESPACE_PATTERN, oldNamespacePattern, + namespacePattern)); + } + + @Override + public void setNamespacePattern(String newNamespacePattern) { + setNamespacePatternGen(newNamespacePattern); + if (newNamespacePattern != null) { + try { + compiledNamespacePattern = Pattern.compile(StringUtils.trimmedOrNull(newNamespacePattern)); + } catch (PatternSyntaxException e) { + // ignore + } + } else { + compiledNamespacePattern = null; + } + } + + /** + * + * + * @generated + */ + @Override + public String getNamePattern() { + return namePattern; + } + + /** + * + * + * @generated + */ + public void setNamePatternGen(String newNamePattern) { + String oldNamePattern = namePattern; + namePattern = newNamePattern; + if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, + AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__NAME_PATTERN, oldNamePattern, namePattern)); + } + + @Override + public void setNamePattern(String newNamePattern) { + setNamePatternGen(newNamePattern); + if (newNamePattern != null) { + try { + compiledNamePattern = Pattern.compile(StringUtils.trimmedOrNull(newNamePattern)); + } catch (PatternSyntaxException e) { + // ignore + } + } else { + compiledNamePattern = null; + } + } + + /** + * + * + * @generated + */ + @Override + public String getGroupId() { + return groupId; + } + + /** + * + * + * @generated + */ + @Override + public void setGroupId(String newGroupId) { + String oldGroupId = groupId; + groupId = newGroupId; + if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__GROUP_ID, + oldGroupId, groupId)); + } + + /** + * + * + * @generated + */ + @Override + public String getArtifactId() { + return artifactId; + } + + /** + * + * + * @generated + */ + @Override + public void setArtifactId(String newArtifactId) { + String oldArtifactId = artifactId; + artifactId = newArtifactId; + if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, + AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__ARTIFACT_ID, oldArtifactId, artifactId)); + } + + /** + * + * + * @generated + */ + @Override + public String getVersionRangePattern() { + return versionRangePattern; + } + + /** + * + * + * @generated + */ + public void setVersionRangePatternGen(String newVersionRangePattern) { + String oldVersionRangePattern = versionRangePattern; + versionRangePattern = newVersionRangePattern; + if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, + AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__VERSION_RANGE_PATTERN, oldVersionRangePattern, + versionRangePattern)); + } + + @Override + public void setVersionRangePattern(String newVersionRangePattern) { + setVersionRangePatternGen(newVersionRangePattern); + if (newVersionRangePattern != null) { + try { + compiledVersionRangePattern = Pattern.compile(StringUtils.trimmedOrNull(newVersionRangePattern)); + } catch (PatternSyntaxException e) { + // ignore + } + } else { + compiledVersionRangePattern = null; + } + + } + + /** + * + * + * @generated + */ + @Override + public String getVersionRangeTemplate() { + return versionRangeTemplate; + } + + /** + * + * + * @generated + */ + @Override + public void setVersionRangeTemplate(String newVersionRangeTemplate) { + String oldVersionRangeTemplate = versionRangeTemplate; + versionRangeTemplate = newVersionRangeTemplate; + if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.SET, + AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__VERSION_RANGE_TEMPLATE, oldVersionRangeTemplate, + versionRangeTemplate)); + } + + /** + * + * + * @generated NOT + */ + @Override + public MavenDependencyItem map(String iuName, String requirementNamespace, String requirementName, + VersionRange versionRange) { + if ((compiledIUNamePattern == null || compiledIUNamePattern.matcher(iuName).matches()) + && compiledNamespacePattern.matcher(requirementNamespace).matches()) { + Matcher matcher = compiledNamePattern.matcher(requirementName); + if (matcher.matches()) { + MavenDependencyItem item = AggregatorFactory.eINSTANCE.createMavenDependencyItem(); + item.setGroupId(matcher.replaceFirst(getGroupId())); + item.setArtifactId(matcher.replaceFirst(getArtifactId())); + item.setMavenDependencyMapping(this); + if (compiledVersionRangePattern != null) { + Matcher versionRangeMatcher = compiledVersionRangePattern.matcher(versionRange.toString()); + if (versionRangeMatcher.matches()) { + if (versionRangeTemplate != null) { + String replacement = versionRangeMatcher.replaceFirst(versionRangeTemplate); + item.setMappedVersionRange(replacement); + } + } else { + return null; + } + } + return item; + } + } + return null; + } + + /** + * + * + * @generated + */ + @Override + public Object eGet(int featureID, boolean resolve, boolean coreType) { + switch (featureID) { + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__STATUS: + return getStatus(); + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__ERRORS: + return getErrors(); + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__WARNINGS: + return getWarnings(); + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__INFOS: + return getInfos(); + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__IU_NAME_PATTERN: + return getIuNamePattern(); + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__NAMESPACE_PATTERN: + return getNamespacePattern(); + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__NAME_PATTERN: + return getNamePattern(); + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__GROUP_ID: + return getGroupId(); + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__ARTIFACT_ID: + return getArtifactId(); + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__VERSION_RANGE_PATTERN: + return getVersionRangePattern(); + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__VERSION_RANGE_TEMPLATE: + return getVersionRangeTemplate(); + } + return super.eGet(featureID, resolve, coreType); + } + + /** + * + * + * @generated + */ + @SuppressWarnings("unchecked") + @Override + public void eSet(int featureID, Object newValue) { + switch (featureID) { + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__ERRORS: + getErrors().clear(); + getErrors().addAll((Collection) newValue); + return; + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__WARNINGS: + getWarnings().clear(); + getWarnings().addAll((Collection) newValue); + return; + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__INFOS: + getInfos().clear(); + getInfos().addAll((Collection) newValue); + return; + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__IU_NAME_PATTERN: + setIuNamePattern((String) newValue); + return; + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__NAMESPACE_PATTERN: + setNamespacePattern((String) newValue); + return; + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__NAME_PATTERN: + setNamePattern((String) newValue); + return; + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__GROUP_ID: + setGroupId((String) newValue); + return; + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__ARTIFACT_ID: + setArtifactId((String) newValue); + return; + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__VERSION_RANGE_PATTERN: + setVersionRangePattern((String) newValue); + return; + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__VERSION_RANGE_TEMPLATE: + setVersionRangeTemplate((String) newValue); + return; + } + super.eSet(featureID, newValue); + } + + /** + * + * + * @generated + */ + @Override + public void eUnset(int featureID) { + switch (featureID) { + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__ERRORS: + getErrors().clear(); + return; + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__WARNINGS: + getWarnings().clear(); + return; + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__INFOS: + getInfos().clear(); + return; + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__IU_NAME_PATTERN: + setIuNamePattern(IU_NAME_PATTERN_EDEFAULT); + return; + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__NAMESPACE_PATTERN: + setNamespacePattern(NAMESPACE_PATTERN_EDEFAULT); + return; + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__NAME_PATTERN: + setNamePattern(NAME_PATTERN_EDEFAULT); + return; + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__GROUP_ID: + setGroupId(GROUP_ID_EDEFAULT); + return; + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__ARTIFACT_ID: + setArtifactId(ARTIFACT_ID_EDEFAULT); + return; + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__VERSION_RANGE_PATTERN: + setVersionRangePattern(VERSION_RANGE_PATTERN_EDEFAULT); + return; + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__VERSION_RANGE_TEMPLATE: + setVersionRangeTemplate(VERSION_RANGE_TEMPLATE_EDEFAULT); + return; + } + super.eUnset(featureID); + } + + /** + * + * + * @generated + */ + @Override + public boolean eIsSet(int featureID) { + switch (featureID) { + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__STATUS: + return getStatus() != null; + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__ERRORS: + return errors != null && !errors.isEmpty(); + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__WARNINGS: + return warnings != null && !warnings.isEmpty(); + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__INFOS: + return infos != null && !infos.isEmpty(); + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__IU_NAME_PATTERN: + return IU_NAME_PATTERN_EDEFAULT == null ? iuNamePattern != null + : !IU_NAME_PATTERN_EDEFAULT.equals(iuNamePattern); + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__NAMESPACE_PATTERN: + return NAMESPACE_PATTERN_EDEFAULT == null ? namespacePattern != null + : !NAMESPACE_PATTERN_EDEFAULT.equals(namespacePattern); + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__NAME_PATTERN: + return NAME_PATTERN_EDEFAULT == null ? namePattern != null : !NAME_PATTERN_EDEFAULT.equals(namePattern); + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__GROUP_ID: + return GROUP_ID_EDEFAULT == null ? groupId != null : !GROUP_ID_EDEFAULT.equals(groupId); + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__ARTIFACT_ID: + return ARTIFACT_ID_EDEFAULT == null ? artifactId != null : !ARTIFACT_ID_EDEFAULT.equals(artifactId); + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__VERSION_RANGE_PATTERN: + return VERSION_RANGE_PATTERN_EDEFAULT == null ? versionRangePattern != null + : !VERSION_RANGE_PATTERN_EDEFAULT.equals(versionRangePattern); + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__VERSION_RANGE_TEMPLATE: + return VERSION_RANGE_TEMPLATE_EDEFAULT == null ? versionRangeTemplate != null + : !VERSION_RANGE_TEMPLATE_EDEFAULT.equals(versionRangeTemplate); + } + return super.eIsSet(featureID); + } + + /** + * + * + * @generated + */ + @Override + public int eBaseStructuralFeatureID(int derivedFeatureID, Class baseClass) { + if (baseClass == InfosProvider.class) { + switch (derivedFeatureID) { + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__ERRORS: + return AggregatorPackage.INFOS_PROVIDER__ERRORS; + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__WARNINGS: + return AggregatorPackage.INFOS_PROVIDER__WARNINGS; + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__INFOS: + return AggregatorPackage.INFOS_PROVIDER__INFOS; + default: + return -1; + } + } + return super.eBaseStructuralFeatureID(derivedFeatureID, baseClass); + } + + /** + * + * + * @generated + */ + @Override + public int eDerivedStructuralFeatureID(int baseFeatureID, Class baseClass) { + if (baseClass == InfosProvider.class) { + switch (baseFeatureID) { + case AggregatorPackage.INFOS_PROVIDER__ERRORS: + return AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__ERRORS; + case AggregatorPackage.INFOS_PROVIDER__WARNINGS: + return AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__WARNINGS; + case AggregatorPackage.INFOS_PROVIDER__INFOS: + return AggregatorPackage.MAVEN_DEPENDENCY_MAPPING__INFOS; + default: + return -1; + } + } + return super.eDerivedStructuralFeatureID(baseFeatureID, baseClass); + } + + /** + * + * + * @generated + */ + @Override + public String toString() { + if (eIsProxy()) + return super.toString(); + + StringBuilder result = new StringBuilder(super.toString()); + result.append(" (errors: "); + result.append(errors); + result.append(", warnings: "); + result.append(warnings); + result.append(", infos: "); + result.append(infos); + result.append(", iuNamePattern: "); + result.append(iuNamePattern); + result.append(", namespacePattern: "); + result.append(namespacePattern); + result.append(", namePattern: "); + result.append(namePattern); + result.append(", groupId: "); + result.append(groupId); + result.append(", artifactId: "); + result.append(artifactId); + result.append(", versionRangePattern: "); + result.append(versionRangePattern); + result.append(", versionRangeTemplate: "); + result.append(versionRangeTemplate); + result.append(')'); + return result.toString(); + } + +} // MavenDependencyMappingImpl diff --git a/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/impl/MavenMappingImpl.java b/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/impl/MavenMappingImpl.java index b3ff7c8cf..da3586263 100644 --- a/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/impl/MavenMappingImpl.java +++ b/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/impl/MavenMappingImpl.java @@ -57,7 +57,8 @@ public class MavenMappingImpl extends MinimalEObjectImpl.Container implements Ma public static final String MAVEN_SOURCES_CLASSIFIER = "sources"; - private static final String P2_SOURCE_SUFFIX = ".source"; + private static final Pattern P2_SOURCE_BUNDLE_OR_FEATURE = Pattern + .compile("(.*)(?:\\.source)(|\\.feature\\.group)"); private Pattern compiledPattern; @@ -222,6 +223,15 @@ public class MavenMappingImpl extends MinimalEObjectImpl.Container implements Ma */ protected static final int SNAPSHOT_EFLAG = 1 << 0; + /** + * The flag representing whether the Snapshot attribute has been set. + * + * + * @generated + * @ordered + */ + protected static final int SNAPSHOT_ESETFLAG = 1 << 1; + /** * * @@ -237,10 +247,10 @@ public MavenMappingImpl(String namePattern, String groupId, String artifactId) { setArtifactId(artifactId); } - private void checkReplacements(Pattern pattern, String... replacements) { + static void checkReplacements(Pattern pattern, String... replacements) { String emptyString = ""; String auxGroup = "(.*)"; - Matcher matcher = compiledPattern.matcher(emptyString); + Matcher matcher = pattern.matcher(emptyString); StringBuilder auxPatternBuilder = new StringBuilder(); for (int i = matcher.groupCount(); i > 0; i--) auxPatternBuilder.append(auxGroup); @@ -356,7 +366,7 @@ public boolean eIsSet(int featureID) { return VERSION_TEMPLATE_EDEFAULT == null ? versionTemplate != null : !VERSION_TEMPLATE_EDEFAULT.equals(versionTemplate); case AggregatorPackage.MAVEN_MAPPING__SNAPSHOT: - return ((eFlags & SNAPSHOT_EFLAG) != 0) != SNAPSHOT_EDEFAULT; + return isSetSnapshot(); } return super.eIsSet(featureID); } @@ -447,7 +457,7 @@ public void eUnset(int featureID) { setVersionTemplate(VERSION_TEMPLATE_EDEFAULT); return; case AggregatorPackage.MAVEN_MAPPING__SNAPSHOT: - setSnapshot(SNAPSHOT_EDEFAULT); + unsetSnapshot(); return; } super.eUnset(featureID); @@ -520,15 +530,17 @@ public Status getStatus() { String pattern = StringUtils.trimmedOrNull(getNamePattern()); if (pattern == null || StringUtils.trimmedOrNull(getGroupId()) == null || StringUtils.trimmedOrNull(getArtifactId()) == null) - return AggregatorFactory.eINSTANCE.createStatus(StatusCode.BROKEN); + return AggregatorFactory.eINSTANCE.createStatus(StatusCode.BROKEN, "Incomplete"); compiledPattern = Pattern.compile(pattern); checkReplacements(compiledPattern, getGroupId(), getArtifactId()); return AggregatorFactory.eINSTANCE.createStatus(StatusCode.OK); } catch (PatternSyntaxException e) { - return AggregatorFactory.eINSTANCE.createStatus(StatusCode.BROKEN); + return AggregatorFactory.eINSTANCE.createStatus(StatusCode.BROKEN, e.getMessage()); } catch (IndexOutOfBoundsException e) { - return AggregatorFactory.eINSTANCE.createStatus(StatusCode.BROKEN); + return AggregatorFactory.eINSTANCE.createStatus(StatusCode.BROKEN, e.getMessage()); + } catch (IllegalArgumentException e) { + return AggregatorFactory.eINSTANCE.createStatus(StatusCode.BROKEN, e.getMessage()); } } @@ -574,10 +586,10 @@ public EList getWarnings() { public MavenItem map(String installableUnitID, Version version) { if (compiledPattern != null) { // map osgi name suffix ".source" to maven classifier "sources": - boolean isSource = installableUnitID.endsWith(P2_SOURCE_SUFFIX); + Matcher matcher = P2_SOURCE_BUNDLE_OR_FEATURE.matcher(installableUnitID); + boolean isSource = matcher.matches(); if (isSource) { - installableUnitID = installableUnitID.substring(0, - installableUnitID.length() - P2_SOURCE_SUFFIX.length()); + installableUnitID = matcher.group(1) + matcher.group(2); } Matcher m = compiledPattern.matcher(installableUnitID); @@ -607,10 +619,11 @@ public MavenItem map(String installableUnitID, Version version) { */ @Override public String mapVersion(Version version) { - if (this.versionPattern != null && this.versionTemplate != null) { + if (version != null && this.versionPattern != null && this.versionTemplate != null) { if (this.compiledVersionPattern == null) this.compiledVersionPattern = Pattern.compile(this.versionPattern); - Matcher vm = this.compiledVersionPattern.matcher(version.getOriginal()); + String original = version.getOriginal(); + Matcher vm = this.compiledVersionPattern.matcher(original == null ? version.toString() : original); if (vm.matches()) { return vm.replaceFirst(this.versionTemplate); } @@ -720,9 +733,40 @@ public void setSnapshot(boolean newSnapshot) { eFlags |= SNAPSHOT_EFLAG; else eFlags &= ~SNAPSHOT_EFLAG; + boolean oldSnapshotESet = (eFlags & SNAPSHOT_ESETFLAG) != 0; + eFlags |= SNAPSHOT_ESETFLAG; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, AggregatorPackage.MAVEN_MAPPING__SNAPSHOT, - oldSnapshot, newSnapshot)); + oldSnapshot, newSnapshot, !oldSnapshotESet)); + } + + /** + * + * + * @generated + */ + @Override + public void unsetSnapshot() { + boolean oldSnapshot = (eFlags & SNAPSHOT_EFLAG) != 0; + boolean oldSnapshotESet = (eFlags & SNAPSHOT_ESETFLAG) != 0; + if (SNAPSHOT_EDEFAULT) + eFlags |= SNAPSHOT_EFLAG; + else + eFlags &= ~SNAPSHOT_EFLAG; + eFlags &= ~SNAPSHOT_ESETFLAG; + if (eNotificationRequired()) + eNotify(new ENotificationImpl(this, Notification.UNSET, AggregatorPackage.MAVEN_MAPPING__SNAPSHOT, + oldSnapshot, SNAPSHOT_EDEFAULT, oldSnapshotESet)); + } + + /** + * + * + * @generated + */ + @Override + public boolean isSetSnapshot() { + return (eFlags & SNAPSHOT_ESETFLAG) != 0; } /** @@ -753,7 +797,10 @@ public String toString() { result.append(", versionTemplate: "); result.append(versionTemplate); result.append(", snapshot: "); - result.append((eFlags & SNAPSHOT_EFLAG) != 0); + if ((eFlags & SNAPSHOT_ESETFLAG) != 0) + result.append((eFlags & SNAPSHOT_EFLAG) != 0); + else + result.append(""); result.append(')'); return result.toString(); } diff --git a/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/util/AggregatorAdapterFactory.java b/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/util/AggregatorAdapterFactory.java index b4856a376..aea079108 100644 --- a/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/util/AggregatorAdapterFactory.java +++ b/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/util/AggregatorAdapterFactory.java @@ -32,6 +32,8 @@ import org.eclipse.cbi.p2repo.aggregator.MapRule; import org.eclipse.cbi.p2repo.aggregator.MappedRepository; import org.eclipse.cbi.p2repo.aggregator.MappedUnit; +import org.eclipse.cbi.p2repo.aggregator.MavenDependencyItem; +import org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping; import org.eclipse.cbi.p2repo.aggregator.MavenItem; import org.eclipse.cbi.p2repo.aggregator.MavenMapping; import org.eclipse.cbi.p2repo.aggregator.MetadataRepositoryReference; @@ -174,6 +176,11 @@ public Adapter caseMapRule(MapRule object) { return createMapRuleAdapter(); } + @Override + public Adapter caseMavenDependencyItem(MavenDependencyItem object) { + return createMavenDependencyItemAdapter(); + } + @Override public Adapter caseMavenItem(MavenItem object) { return createMavenItemAdapter(); @@ -184,6 +191,11 @@ public Adapter caseMavenMapping(MavenMapping object) { return createMavenMappingAdapter(); } + @Override + public Adapter caseMavenDependencyMapping(MavenDependencyMapping object) { + return createMavenDependencyMappingAdapter(); + } + @Override public Adapter caseMetadataRepositoryReference(MetadataRepositoryReference object) { return createMetadataRepositoryReferenceAdapter(); @@ -530,6 +542,21 @@ public Adapter createMapRuleAdapter() { return null; } + /** + * Creates a new adapter for an object of class '{@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyItem Maven Dependency Item}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see org.eclipse.cbi.p2repo.aggregator.MavenDependencyItem + * @since 1.1.0 + * @generated + */ + public Adapter createMavenDependencyItemAdapter() { + return null; + } + /** * Creates a new adapter for an object of class '{@link org.eclipse.cbi.p2repo.aggregator.MavenItem Maven Item}'. * @@ -554,6 +581,21 @@ public Adapter createMavenMappingAdapter() { return null; } + /** + * Creates a new adapter for an object of class '{@link org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping Maven Dependency Mapping}'. + * + * This default implementation returns null so that we can easily ignore cases; + * it's useful to ignore a case when inheritance will catch all the cases anyway. + * + * @return the new adapter. + * @see org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping + * @since 1.1.0 + * @generated + */ + public Adapter createMavenDependencyMappingAdapter() { + return null; + } + /** * Creates a new adapter for an object of class '{@link org.eclipse.cbi.p2repo.aggregator.MetadataRepositoryReference Metadata Repository Reference}'. * diff --git a/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/util/AggregatorResourceFactoryImpl.java b/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/util/AggregatorResourceFactoryImpl.java index 631a6dd86..07b2d66d3 100644 --- a/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/util/AggregatorResourceFactoryImpl.java +++ b/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/util/AggregatorResourceFactoryImpl.java @@ -10,9 +10,13 @@ */ package org.eclipse.cbi.p2repo.aggregator.util; +import java.util.Map; + import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.impl.ResourceFactoryImpl; +import org.eclipse.emf.ecore.xmi.XMLResource; +import org.eclipse.emf.ecore.xmi.impl.URIHandlerImpl; /** * @@ -36,11 +40,24 @@ public AggregatorResourceFactoryImpl() { * Creates an instance of the resource. * * - * @generated + * @generated NOT */ @Override public Resource createResource(URI uri) { - Resource result = new AggregatorResourceImpl(uri); + AggregatorResourceImpl result = new AggregatorResourceImpl(uri); + + Map defaultLoadOptions = result.getDefaultLoadOptions(); + defaultLoadOptions.put(XMLResource.OPTION_EXTENDED_META_DATA, Boolean.TRUE); + defaultLoadOptions.put(XMLResource.OPTION_LAX_FEATURE_PROCESSING, Boolean.TRUE); + defaultLoadOptions.put(XMLResource.OPTION_DEFER_IDREF_RESOLUTION, Boolean.TRUE); + defaultLoadOptions.put(XMLResource.OPTION_RECORD_UNKNOWN_FEATURE, Boolean.TRUE); + + Map defaultSaveOptions = result.getDefaultSaveOptions(); + defaultSaveOptions.put(XMLResource.OPTION_EXTENDED_META_DATA, Boolean.TRUE); + // defaultSaveOptions.put(XMLResource.OPTION_USE_ENCODED_ATTRIBUTE_STYLE, Boolean.TRUE); + // defaultSaveOptions.put(XMLResource.OPTION_LINE_WIDTH, 10); + defaultSaveOptions.put(XMLResource.OPTION_URI_HANDLER, new URIHandlerImpl.PlatformSchemeAware()); + return result; } } // AggregatorResourceFactoryImpl diff --git a/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/util/AggregatorSwitch.java b/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/util/AggregatorSwitch.java index d675bd7d4..4ffab02b1 100644 --- a/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/util/AggregatorSwitch.java +++ b/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/util/AggregatorSwitch.java @@ -32,6 +32,8 @@ import org.eclipse.cbi.p2repo.aggregator.MapRule; import org.eclipse.cbi.p2repo.aggregator.MappedRepository; import org.eclipse.cbi.p2repo.aggregator.MappedUnit; +import org.eclipse.cbi.p2repo.aggregator.MavenDependencyItem; +import org.eclipse.cbi.p2repo.aggregator.MavenDependencyMapping; import org.eclipse.cbi.p2repo.aggregator.MavenItem; import org.eclipse.cbi.p2repo.aggregator.MavenMapping; import org.eclipse.cbi.p2repo.aggregator.MetadataRepositoryReference; @@ -362,6 +364,22 @@ public T1 caseMapRule(MapRule object) { return null; } + /** + * Returns the result of interpreting the object as an instance of 'Maven Dependency Item'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Maven Dependency Item'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @since 1.1.0 + * @generated + */ + public T1 caseMavenDependencyItem(MavenDependencyItem object) { + return null; + } + /** * Returns the result of interpreting the object as an instance of 'Maven Item'. * @@ -388,6 +406,22 @@ public T1 caseMavenMapping(MavenMapping object) { return null; } + /** + * Returns the result of interpreting the object as an instance of 'Maven Dependency Mapping'. + * + * This implementation returns null; + * returning a non-null result will terminate the switch. + * + * @param object the target of the switch. + * @return the result of interpreting the object as an instance of 'Maven Dependency Mapping'. + * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject) + * @since 1.1.0 + * @generated + */ + public T1 caseMavenDependencyMapping(MavenDependencyMapping object) { + return null; + } + /** * Returns the result of interpreting the object as an instance of 'Metadata Repository Reference'. * @@ -768,6 +802,13 @@ protected T1 doSwitch(int classifierID, EObject theEObject) { result = defaultCase(theEObject); return result; } + case AggregatorPackage.MAVEN_DEPENDENCY_ITEM: { + MavenDependencyItem mavenDependencyItem = (MavenDependencyItem) theEObject; + T1 result = caseMavenDependencyItem(mavenDependencyItem); + if (result == null) + result = defaultCase(theEObject); + return result; + } case AggregatorPackage.MAVEN_ITEM: { MavenItem mavenItem = (MavenItem) theEObject; T1 result = caseMavenItem(mavenItem); @@ -786,6 +827,17 @@ protected T1 doSwitch(int classifierID, EObject theEObject) { result = defaultCase(theEObject); return result; } + case AggregatorPackage.MAVEN_DEPENDENCY_MAPPING: { + MavenDependencyMapping mavenDependencyMapping = (MavenDependencyMapping) theEObject; + T1 result = caseMavenDependencyMapping(mavenDependencyMapping); + if (result == null) + result = caseStatusProvider(mavenDependencyMapping); + if (result == null) + result = caseInfosProvider(mavenDependencyMapping); + if (result == null) + result = defaultCase(theEObject); + return result; + } case AggregatorPackage.METADATA_REPOSITORY_REFERENCE: { MetadataRepositoryReference metadataRepositoryReference = (MetadataRepositoryReference) theEObject; T1 result = caseMetadataRepositoryReference(metadataRepositoryReference); diff --git a/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/util/GeneralUtils.java b/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/util/GeneralUtils.java index 4eade0ea5..ffb81da8c 100644 --- a/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/util/GeneralUtils.java +++ b/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/util/GeneralUtils.java @@ -15,6 +15,7 @@ import org.eclipse.cbi.p2repo.aggregator.Aggregation; import org.eclipse.cbi.p2repo.aggregator.EnabledStatusProvider; +import org.eclipse.cbi.p2repo.aggregator.MavenMapping; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.common.util.UniqueEList; import org.eclipse.emf.ecore.EObject; @@ -25,15 +26,15 @@ public class GeneralUtils { public static Aggregation getAggregation(EObject eObject) { EObject p = eObject; EObject c = p; - while(c != null) { - if(c instanceof Aggregation) + while (c != null) { + if (c instanceof Aggregation) return (Aggregation) c; p = c; c = c.eContainer(); } // Not found in parent chain. Get the resource set. EList contents = getAggregatorResource(p).getContents(); - if(contents != null && contents.size() > 0) + if (contents != null && contents.size() > 0) return (Aggregation) contents.get(0); throw new IllegalArgumentException("Aggregator was not found"); @@ -42,11 +43,10 @@ public static Aggregation getAggregation(EObject eObject) { public static AggregatorResource getAggregatorResource(EObject eObject) { try { - for(Resource resource : new ArrayList(eObject.eResource().getResourceSet().getResources())) - if(resource instanceof AggregatorResource) + for (Resource resource : new ArrayList(eObject.eResource().getResourceSet().getResources())) + if (resource instanceof AggregatorResource) return (AggregatorResource) resource; - } - catch(Exception e) { + } catch (Exception e) { throw new IllegalArgumentException("AggregatorResource was not found", e); } @@ -56,33 +56,65 @@ public static AggregatorResource getAggregatorResource(EObject eObject) { public static EList getEnabled(EList ts) { int count = ts.size(); int idx = 0; - for(; idx < count; ++idx) { - if(!ts.get(idx).isEnabled()) + for (; idx < count; ++idx) { + if (!ts.get(idx).isEnabled()) break; } - if(idx == count) + if (idx == count) return ts; EList enabledTs = new UniqueEList.FastCompare(count - 1); - for(int sdx = 0; sdx < idx; ++sdx) + for (int sdx = 0; sdx < idx; ++sdx) enabledTs.add(ts.get(sdx)); - for(++idx; idx < count; ++idx) { + for (++idx; idx < count; ++idx) { T t = ts.get(idx); - if(t.isEnabled()) + if (t.isEnabled()) enabledTs.add(t); } return enabledTs; } public static boolean isBranchEnabled(Object esp) { - if(esp instanceof EnabledStatusProvider && !((EnabledStatusProvider) esp).isEnabled()) + if (esp instanceof EnabledStatusProvider && !((EnabledStatusProvider) esp).isEnabled()) return false; - if(esp instanceof EObject) { - for(EObject v = ((EObject) esp).eContainer(); v != null; v = v.eContainer()) { - if(v instanceof EnabledStatusProvider) + if (esp instanceof EObject) { + for (EObject v = ((EObject) esp).eContainer(); v != null; v = v.eContainer()) { + if (v instanceof EnabledStatusProvider) return ((EnabledStatusProvider) v).isBranchEnabled(); } } return true; } + + public static String toString(MavenMapping mapping) { + StringBuilder result = new StringBuilder(); + String namePattern = mapping.getNamePattern(); + if (namePattern != null) { + result.append(namePattern); + } + + result.append("' => '"); + String groupId = mapping.getGroupId(); + if (groupId != null) { + result.append(groupId); + } + String artifactId = mapping.getArtifactId(); + if (artifactId != null) { + result.append('/'); + result.append(artifactId); + } + + String versionPattern = mapping.getVersionPattern(); + String versionTemplate = mapping.getVersionTemplate(); + if (versionPattern != null && versionTemplate != null) { + result.append("', '").append(versionPattern); + result.append("' => '").append(versionTemplate); + } + + if (mapping.isSnapshot()) { + result.append(" SNAPSHOT"); + } + + return result.toString(); + } } diff --git a/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/util/InstallableUnitUtils.java b/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/util/InstallableUnitUtils.java index d37569f7c..dde18d385 100644 --- a/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/util/InstallableUnitUtils.java +++ b/plugins/org.eclipse.cbi.p2repo.aggregator/src/org/eclipse/cbi/p2repo/aggregator/util/InstallableUnitUtils.java @@ -11,20 +11,32 @@ package org.eclipse.cbi.p2repo.aggregator.util; -import org.eclipse.cbi.p2repo.p2.InstallableUnit; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; + import org.eclipse.cbi.p2repo.aggregator.AggregatorFactory; import org.eclipse.cbi.p2repo.aggregator.IAggregatorConstants; import org.eclipse.cbi.p2repo.aggregator.InstallableUnitType; import org.eclipse.cbi.p2repo.aggregator.Status; import org.eclipse.cbi.p2repo.aggregator.StatusCode; +import org.eclipse.cbi.p2repo.p2.InstallableUnit; import org.eclipse.cbi.p2repo.util.StringUtils; import org.eclipse.equinox.internal.p2.metadata.RequiredCapability; +import org.eclipse.equinox.internal.p2.metadata.TranslationSupport; +import org.eclipse.equinox.internal.p2.metadata.index.CapabilityIndex; +import org.eclipse.equinox.internal.p2.metadata.index.IdIndex; +import org.eclipse.equinox.internal.p2.metadata.index.IndexProvider; import org.eclipse.equinox.p2.metadata.IInstallableUnit; import org.eclipse.equinox.p2.metadata.IProvidedCapability; import org.eclipse.equinox.p2.metadata.IRequirement; +import org.eclipse.equinox.p2.metadata.KeyWithLocale; import org.eclipse.equinox.p2.metadata.MetadataFactory.InstallableUnitDescription; import org.eclipse.equinox.p2.metadata.Version; import org.eclipse.equinox.p2.metadata.VersionRange; +import org.eclipse.equinox.p2.metadata.index.IIndex; +import org.eclipse.equinox.p2.query.IQueryable; /** * @author Karel Brezina @@ -111,4 +123,50 @@ public static boolean isSourceBundle(IInstallableUnit iu) { return false; } + public static IQueryable getIndex(Collection ius) { + return new InstallableUnitIndex(ius); + } + + private static class InstallableUnitIndex extends IndexProvider { + private final List dataSet; + private final IIndex capabilityIndex; + private final IIndex idIndex; + private final TranslationSupport translationSupport; + + public InstallableUnitIndex(Collection ius) { + dataSet = new ArrayList<>(ius); + capabilityIndex = new CapabilityIndex(dataSet.iterator()); + idIndex = new IdIndex(dataSet.iterator()); + translationSupport = new TranslationSupport(this); + } + + @Override + public Iterator everything() { + return dataSet.iterator(); + } + + @Override + public IIndex getIndex(String memberName) { + if (org.eclipse.equinox.internal.p2.metadata.InstallableUnit.MEMBER_PROVIDED_CAPABILITIES + .equals(memberName)) { + return capabilityIndex; + } + if (org.eclipse.equinox.internal.p2.metadata.InstallableUnit.MEMBER_ID.equals(memberName)) { + return idIndex; + } + return null; + } + + @Override + public Object getManagedProperty(Object client, String memberName, Object key) { + if (client instanceof IInstallableUnit + && org.eclipse.equinox.internal.p2.metadata.InstallableUnit.MEMBER_TRANSLATED_PROPERTIES + .equals(memberName)) { + IInstallableUnit iu = (IInstallableUnit) client; + return key instanceof KeyWithLocale ? translationSupport.getIUProperty(iu, (KeyWithLocale) key) + : translationSupport.getIUProperty(iu, key.toString()); + } + return null; + } + } } diff --git a/plugins/org.eclipse.cbi.p2repo.p2.maven/src/org/eclipse/cbi/p2repo/p2/maven/util/VersionUtil.java b/plugins/org.eclipse.cbi.p2repo.p2.maven/src/org/eclipse/cbi/p2repo/p2/maven/util/VersionUtil.java index 684350e82..17e2d0ae1 100644 --- a/plugins/org.eclipse.cbi.p2repo.p2.maven/src/org/eclipse/cbi/p2repo/p2/maven/util/VersionUtil.java +++ b/plugins/org.eclipse.cbi.p2repo.p2.maven/src/org/eclipse/cbi/p2repo/p2/maven/util/VersionUtil.java @@ -249,4 +249,9 @@ public static String versionAsSnapshot(String version) { } return version; } + + public static String versionNotAsSnapshot(String version) { + return version.endsWith(DASH_SNAPSHOT) ? version.substring(0, version.length() - DASH_SNAPSHOT.length()) + : version; + } } diff --git a/plugins/org.eclipse.cbi.p2repo.p2/src/org/eclipse/cbi/p2repo/p2/impl/RequiredCapabilityImpl.java b/plugins/org.eclipse.cbi.p2repo.p2/src/org/eclipse/cbi/p2repo/p2/impl/RequiredCapabilityImpl.java index 3309d68af..5f75da772 100644 --- a/plugins/org.eclipse.cbi.p2repo.p2/src/org/eclipse/cbi/p2repo/p2/impl/RequiredCapabilityImpl.java +++ b/plugins/org.eclipse.cbi.p2repo.p2/src/org/eclipse/cbi/p2repo/p2/impl/RequiredCapabilityImpl.java @@ -409,7 +409,9 @@ public String toString() { result.append("bundle"); //$NON-NLS-1$ else if ("java.package".equals(getNamespace())) //$NON-NLS-1$ result.append("package"); //$NON-NLS-1$ - else if (!IInstallableUnit.NAMESPACE_IU_ID.equals(getNamespace())) + else if (IInstallableUnit.NAMESPACE_IU_ID.equals(getNamespace())) // $NON-NLS-1$ + result.append("iu"); //$NON-NLS-1$ + else result.append(getNamespace()); if (result.length() > 0) result.append(' '); diff --git a/plugins/org.eclipse.cbi.p2repo.util/src/org/eclipse/cbi/p2repo/util/IOUtils.java b/plugins/org.eclipse.cbi.p2repo.util/src/org/eclipse/cbi/p2repo/util/IOUtils.java index 07b56fabf..b621e1e11 100644 --- a/plugins/org.eclipse.cbi.p2repo.util/src/org/eclipse/cbi/p2repo/util/IOUtils.java +++ b/plugins/org.eclipse.cbi.p2repo.util/src/org/eclipse/cbi/p2repo/util/IOUtils.java @@ -16,6 +16,11 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.nio.file.FileVisitResult; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.SimpleFileVisitor; +import java.nio.file.attribute.BasicFileAttributes; /** * @author filip.hrbek@cloudsmith.com @@ -27,11 +32,10 @@ public class IOUtils { * @param is */ public static void close(Closeable is) { - if(is != null) + if (is != null) try { is.close(); - } - catch(IOException e) { + } catch (IOException e) { // ignore } } @@ -46,20 +50,18 @@ public static void copyStream(InputStream is, OutputStream os, boolean closeInpu int len; try { - while((len = is.read(buffer)) != -1) { + while ((len = is.read(buffer)) != -1) { os.write(buffer, 0, len); } - } - finally { + } finally { try { - if(closeInput) + if (closeInput) is.close(); - } - catch(IOException e) { + } catch (IOException e) { // ignore } - if(closeOutput) + if (closeOutput) os.close(); } } @@ -75,4 +77,22 @@ public static String readString(InputStream is) throws IOException { copyStream(is, os); return new String(os.toByteArray()); } + + public static void delete(Path path) throws IOException { + Files.walkFileTree(path, new SimpleFileVisitor() { + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attributes) throws IOException { + Files.delete(file); + return FileVisitResult.CONTINUE; + } + + @Override + public FileVisitResult postVisitDirectory(Path directory, IOException exception) throws IOException { + if (exception == null) { + Files.delete(directory); + } + return super.postVisitDirectory(directory, exception); + } + }); + } } diff --git a/releng/org.eclipse.cbi.p2repo.releng.parent/launchers/CBI Aggregator.launch b/releng/org.eclipse.cbi.p2repo.releng.parent/launchers/CBI Aggregator.launch index 4b65d225e..2ce70c73f 100644 --- a/releng/org.eclipse.cbi.p2repo.releng.parent/launchers/CBI Aggregator.launch +++ b/releng/org.eclipse.cbi.p2repo.releng.parent/launchers/CBI Aggregator.launch @@ -1,7 +1,6 @@ - @@ -11,81 +10,8 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + @@ -93,63 +19,127 @@ - - + + - + + + - - + + + + + + + + + + + + + + - - - - + + + - - - - - - + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -157,56 +147,109 @@ + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + - - - @@ -214,6 +257,6 @@ - + diff --git a/releng/org.eclipse.cbi.p2repo.releng.target/org.eclipse.cbi.p2repo.aggregator.prereqs.target b/releng/org.eclipse.cbi.p2repo.releng.target/org.eclipse.cbi.p2repo.aggregator.prereqs.target index 501849b72..9a5b63f4e 100644 --- a/releng/org.eclipse.cbi.p2repo.releng.target/org.eclipse.cbi.p2repo.aggregator.prereqs.target +++ b/releng/org.eclipse.cbi.p2repo.releng.target/org.eclipse.cbi.p2repo.aggregator.prereqs.target @@ -1,6 +1,6 @@ - + @@ -15,7 +15,6 @@ -