Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

548115 - [Passage] provide ability to create product version from issue license wizard : part 2 #184

Merged
merged 8 commits into from
Apr 6, 2020
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,15 @@
import javax.annotation.PreDestroy;
import javax.inject.Inject;

import org.eclipse.e4.core.contexts.EclipseContextFactory;
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.e4.core.di.annotations.Optional;
import org.eclipse.e4.ui.di.Focus;
import org.eclipse.e4.ui.di.Persist;
import org.eclipse.e4.ui.di.UIEventTopic;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.passage.lic.emf.meta.ComposableClassMetadata;
import org.eclipse.passage.lic.features.FeatureDescriptor;
import org.eclipse.passage.lic.features.FeatureSetDescriptor;
import org.eclipse.passage.lic.features.FeatureVersionDescriptor;
Expand All @@ -42,8 +44,13 @@
import org.eclipse.passage.lic.users.UserOriginDescriptor;
import org.eclipse.passage.lic.users.registry.UserRegistry;
import org.eclipse.passage.lic.users.registry.UserRegistryEvents;
import org.eclipse.passage.moveto.lic.internal.features.model.FeaturesClassMetadata;
import org.eclipse.passage.moveto.lic.internal.licenses.model.LicensesClassMetadata;
import org.eclipse.passage.moveto.lic.internal.products.model.ProductsClassMetadata;
import org.eclipse.passage.moveto.lic.internal.users.model.UsersClassMetadata;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.osgi.framework.FrameworkUtil;

public class DashboardPanelPart {

Expand Down Expand Up @@ -78,6 +85,14 @@ public void postConstruct(Composite parent, IEclipseContext context) {
createUserInfo(area);
createLicenseInfo(area);
createFooterInfo(area);
// FIXME: replace this with OSGi component registration
ComposableClassMetadata metadata = EclipseContextFactory
.getServiceContext(FrameworkUtil.getBundle(getClass()).getBundleContext())
.get(ComposableClassMetadata.class);
metadata.consider(new FeaturesClassMetadata());
metadata.consider(new ProductsClassMetadata());
metadata.consider(new UsersClassMetadata());
metadata.consider(new LicensesClassMetadata());
}

protected void createHeaderInfo(Composite parent) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@

import org.eclipse.core.runtime.jobs.IJobChangeEvent;
import org.eclipse.core.runtime.jobs.JobChangeAdapter;
import org.eclipse.e4.core.contexts.EclipseContextFactory;
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.e4.core.services.events.IEventBroker;
import org.eclipse.jface.dialogs.MessageDialog;
Expand All @@ -27,7 +26,6 @@
import org.eclipse.osgi.util.NLS;
import org.eclipse.passage.lic.api.LicensingResult;
import org.eclipse.passage.lic.api.access.LicensingRequest;
import org.eclipse.passage.lic.emf.meta.ComposableClassMetadata;
import org.eclipse.passage.lic.licenses.LicensePackDescriptor;
import org.eclipse.passage.lic.licenses.LicensePlanDescriptor;
import org.eclipse.passage.lic.products.ProductVersionDescriptor;
Expand All @@ -38,11 +36,8 @@
import org.eclipse.passage.loc.internal.dashboard.ui.i18n.IssueLicensePageMessages;
import org.eclipse.passage.loc.users.ui.UsersUi;
import org.eclipse.passage.loc.workbench.LocWokbench;
import org.eclipse.passage.moveto.lic.internal.products.model.ProductsClassMetadata;
import org.eclipse.passage.moveto.lic.internal.users.model.UsersClassMetadata;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.osgi.framework.FrameworkUtil;

public class IssueLicenseWizard extends Wizard {

Expand All @@ -65,12 +60,6 @@ public void init(LicensePlanDescriptor plan, UserDescriptor user, ProductVersion
this.licensePlanDescriptor = plan;
this.userDescriptor = user;
this.productVersionDescriptor = version;
// FIXME: replace this with OSGi component registration
ComposableClassMetadata metadata = EclipseContextFactory
.getServiceContext(FrameworkUtil.getBundle(getClass()).getBundleContext())
.get(ComposableClassMetadata.class);
metadata.consider(new UsersClassMetadata());
metadata.consider(new ProductsClassMetadata());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
/*******************************************************************************
* Copyright (c) 2020 ArSysOp
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* https://www.eclipse.org/legal/epl-2.0/.
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* ArSysOp - initial API and implementation
*******************************************************************************/
package org.eclipse.passage.moveto.lic.internal.features.model;

import java.beans.FeatureDescriptor;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;

import org.eclipse.passage.lic.emf.meta.ClassMetadata;
import org.eclipse.passage.lic.emf.meta.EntityMetadata;
import org.eclipse.passage.lic.emf.meta.PlainEntityMetadata;
import org.eclipse.passage.lic.features.FeatureSetDescriptor;
import org.eclipse.passage.lic.features.model.meta.FeaturesPackage;

//FIXME: AF: remove restriction after moving to the right bundle
@SuppressWarnings("restriction")
public final class FeaturesClassMetadata implements ClassMetadata {

private final FeaturesPackage meta;
private final Map<Class<?>, EntityMetadata> map;

public FeaturesClassMetadata() {
meta = FeaturesPackage.eINSTANCE;
map = new HashMap<Class<?>, EntityMetadata>();
map.put(FeatureSetDescriptor.class, //
new PlainEntityMetadata(//
meta.getFeatureSet(), //
meta.getFeatureSet_Identifier(), //
meta.getFeatureSet_Name()));
map.put(FeatureDescriptor.class, //
new PlainEntityMetadata(//
meta.getFeature(), //
meta.getFeature_Identifier(), //
meta.getFeature_Name()));
}
eparovyshnaya marked this conversation as resolved.
Show resolved Hide resolved

@Override
public Optional<EntityMetadata> find(Class<?> clazz) {
return Optional.ofNullable(map.get(clazz));
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
/*******************************************************************************
* Copyright (c) 2020 ArSysOp
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* https://www.eclipse.org/legal/epl-2.0/.
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* ArSysOp - initial API and implementation
*******************************************************************************/
package org.eclipse.passage.moveto.lic.internal.licenses.model;

import java.util.HashMap;
import java.util.Map;
import java.util.Optional;

import org.eclipse.passage.lic.emf.meta.ClassMetadata;
import org.eclipse.passage.lic.emf.meta.EntityMetadata;
import org.eclipse.passage.lic.emf.meta.PlainEntityMetadata;
import org.eclipse.passage.lic.licenses.LicensePlanDescriptor;
import org.eclipse.passage.lic.licenses.model.meta.LicensesPackage;

//FIXME: AF: remove restriction after moving to the right bundle
@SuppressWarnings("restriction")
public final class LicensesClassMetadata implements ClassMetadata {

private final LicensesPackage meta;
private final Map<Class<?>, EntityMetadata> map;

public LicensesClassMetadata() {
meta = LicensesPackage.eINSTANCE;
map = new HashMap<Class<?>, EntityMetadata>();
map.put(LicensePlanDescriptor.class, //
new PlainEntityMetadata(//
meta.getLicensePlan(), //
meta.getLicensePlan_Identifier(), //
meta.getLicensePlan_Name()));
}

@Override
public Optional<EntityMetadata> find(Class<?> clazz) {
return Optional.ofNullable(map.get(clazz));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,12 @@ Bundle-Name: %Bundle-Name
Bundle-Vendor: %Bundle-Vendor
Bundle-Copyright: %Bundle-Copyright
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Require-Bundle: org.eclipse.osgi;bundle-version="0.0.0",
Require-Bundle: org.eclipse.e4.core.services;bundle-version="0.0.0",
org.eclipse.osgi;bundle-version="0.0.0",
org.eclipse.osgi.services;bundle-version="0.0.0",
org.eclipse.e4.core.services;bundle-version="0.0.0",
org.eclipse.passage.lic.equinox;bundle-version="0.0.0",
org.eclipse.passage.lic.emf;bundle-version="0.0.0",
org.eclipse.passage.lic.equinox;bundle-version="0.0.0",
org.eclipse.passage.lic.products.edit;bundle-version="0.5.100",
org.eclipse.passage.lic.products.model;bundle-version="0.0.0";visibility:=reexport,
org.eclipse.passage.loc.api;bundle-version="0.0.0"
Service-Component: OSGI-INF/*.xml
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ Export-Package: org.eclipse.passage.loc.internal.workbench;
org.eclipse.passage.loc.workbench.dialogs,
org.eclipse.passage.loc.workbench.handlers,
org.eclipse.passage.loc.workbench.parts,
org.eclipse.passage.loc.workbench.viewers
org.eclipse.passage.loc.workbench.viewers,
org.eclipse.passage.moveto.lic.emf.edit;x-internal:=true,
org.eclipse.passage.moveto.lic.internal.emf.edit.i18n;x-internal:=true
Bundle-ActivationPolicy: lazy
Service-Component: OSGI-INF/*.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,11 @@
import java.util.Optional;
import java.util.function.Supplier;

import org.eclipse.emf.common.util.ResourceLocator;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.osgi.util.NLS;
import org.eclipse.passage.lic.emf.ecore.EditingDomainRegistry;
import org.eclipse.passage.lic.emf.edit.ClassifierInitializer;
import org.eclipse.passage.lic.emf.edit.EditingDomainRegistryAccess;
Expand All @@ -27,6 +30,7 @@
import org.eclipse.passage.lic.jface.resource.LicensingImages;
import org.eclipse.passage.loc.internal.workbench.i18n.WorkbenchMessages;
import org.eclipse.passage.loc.internal.workbench.wizards.BaseClassifierWizard;
import org.eclipse.passage.moveto.lic.emf.edit.EClassResources;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Shell;

Expand Down Expand Up @@ -76,20 +80,26 @@ public Optional<C> get() {
protected Optional<EObject> showWizard(Class<C> type, ClassifierInitializer initializer,
EditingDomainRegistry<?> registry) {
EntityMetadata metadata = context.get(ComposableClassMetadata.class).find(type).get();
EClass eClass = metadata.eClass();
ResourceLocator resourceLocator = new EClassResources(eClass).get();
String typeName = resourceLocator.getString(NLS.bind("_UI_{0}_type", eClass.getName())); //$NON-NLS-1$
BaseClassifierWizard<?> wizard = createWizard(type, metadata, initializer, registry);
WizardDialog dialog = new WizardDialog(context.get(Shell.class), wizard);
Shell parentShell = context.get(Shell.class);
WizardDialog dialog = new WizardDialog(parentShell, wizard);
dialog.create();
dialog.setTitle(initializer.newObjectTitle());
dialog.setMessage(initializer.newFileMessage());
dialog.setTitle(typeName);
dialog.setMessage(dialogMessage(typeName));
Shell createdShell = dialog.getShell();
Point location = createdShell.getLocation();
createdShell.setLocation(location.x + 40, location.y + 40);
createdShell.setText(initializer.newObjectMessage());
createdShell.setImage(LicensingImages.getImage(metadata.eClass().getName()));
createdShell.setText(NLS.bind(WorkbenchMessages.CreateClassifier_text_new_type, typeName));
createdShell.setImage(LicensingImages.getImage(eClass.getName()));
dialog.open();
return wizard.created();
}

protected abstract String dialogMessage(String typeName);

protected abstract BaseClassifierWizard<?> createWizard(Class<C> type, EntityMetadata metadata,
ClassifierInitializer initializer, EditingDomainRegistry<?> registry);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,12 @@

import java.util.Optional;

import org.eclipse.osgi.util.NLS;
import org.eclipse.passage.lic.emf.ecore.EditingDomainRegistry;
import org.eclipse.passage.lic.emf.edit.ClassifierInitializer;
import org.eclipse.passage.lic.emf.meta.EntityMetadata;
import org.eclipse.passage.lic.internal.api.MandatoryService;
import org.eclipse.passage.loc.internal.workbench.i18n.WorkbenchMessages;
import org.eclipse.passage.loc.internal.workbench.wizards.BaseClassifierWizard;
import org.eclipse.passage.loc.internal.workbench.wizards.InnerClassifierWizard;
import org.eclipse.passage.loc.internal.workbench.wizards.RootClassifierWizard;
Expand Down Expand Up @@ -56,4 +58,9 @@ protected BaseClassifierWizard<?> createWizard(Class<I> clazz, EntityMetadata me
return new InnerClassifierWizard<I, R>(clazz, metadata, initializer, registry, request, context);
}

@Override
protected String dialogMessage(String typeName) {
return NLS.bind(WorkbenchMessages.CreateInner_message_new_type, typeName);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,12 @@

import java.util.Optional;

import org.eclipse.osgi.util.NLS;
import org.eclipse.passage.lic.emf.ecore.EditingDomainRegistry;
import org.eclipse.passage.lic.emf.edit.ClassifierInitializer;
import org.eclipse.passage.lic.emf.meta.EntityMetadata;
import org.eclipse.passage.lic.internal.api.MandatoryService;
import org.eclipse.passage.loc.internal.workbench.i18n.WorkbenchMessages;
import org.eclipse.passage.loc.internal.workbench.wizards.BaseClassifierWizard;
import org.eclipse.passage.loc.internal.workbench.wizards.RootClassifierWizard;

Expand Down Expand Up @@ -51,4 +53,9 @@ protected BaseClassifierWizard<?> createWizard(Class<R> clazz, EntityMetadata me
return new RootClassifierWizard(metadata, initializer, registry);
}

@Override
protected String dialogMessage(String typeName) {
return NLS.bind(WorkbenchMessages.CreateRoot_message_new_type, typeName);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ public class WorkbenchMessages extends NLS {
public static String Appearance_e_null_title;
public static String BaseClassifierWizardPage_e_null_initializer;
public static String BaseClassifierWizardPage_e_null_metadata;
public static String CreateClassifier_text_new_type;
public static String CreateDomainResource_e_null_classifier;
public static String CreateDomainResource_e_null_context;
public static String CreateDomainResource_e_null_domain;
Expand All @@ -33,6 +34,8 @@ public class WorkbenchMessages extends NLS {
public static String CreateFileWizardPage_label_file;
public static String CreateFileWizardPage_label_identifier;
public static String CreateFileWizardPage_label_name;
public static String CreateInner_message_new_type;
public static String CreateRoot_message_new_type;
public static String ExitWorkbenchHandler_exit_message;
public static String ExitWorkbenchHandler_exit_title;
public static String FileContentDialog_e_unable_read;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ Appearance_e_null_image=Image must not be null
Appearance_e_null_labels=LabelProvider must not be null
BaseClassifierWizardPage_e_null_initializer=Initializer must not be null
BaseClassifierWizardPage_e_null_metadata=Metadata must not be null
CreateClassifier_text_new_type=New {0}
CreateDomainResource_e_null_classifier=Classifier must not be null
CreateDomainResource_e_null_context=Context must not be null
CreateDomainResource_e_null_domain=Domain must not be null
Expand All @@ -28,6 +29,8 @@ CreateFileWizardPage_e_specify_path=Please specify a file path
CreateFileWizardPage_label_file=&File:
CreateFileWizardPage_label_identifier=&Identifier:
CreateFileWizardPage_label_name=&Name:
CreateInner_message_new_type=Please specify properties for new {0}
CreateRoot_message_new_type=Please specify a file name to store new {0}
ExitWorkbenchHandler_exit_message=Do you want to exit the product?
ExitWorkbenchHandler_exit_title=Exit dialog
FileContentDialog_e_unable_read=Error unable to read:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@
import org.eclipse.passage.lic.emf.edit.ClassifierInitializer;
import org.eclipse.passage.lic.emf.meta.EntityMetadata;
import org.eclipse.passage.loc.internal.workbench.i18n.WorkbenchMessages;
import org.eclipse.passage.moveto.lic.emf.edit.EObjectDefaultIdentifier;
import org.eclipse.passage.moveto.lic.emf.edit.EObjectDefaultName;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.widgets.Composite;
Expand Down Expand Up @@ -106,8 +108,8 @@ private void createIdentifierGroup(Composite composite) {
}

protected void initControls(ClassifierInitializer initializer) {
textId.setText(initializer.newObjectIdentifier());
textName.setText(initializer.newObjectName());
textId.setText(new EObjectDefaultIdentifier(eClass).get());
textName.setText(new EObjectDefaultName(eClass).get());
}

protected boolean validatePage() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import java.util.NoSuchElementException;
import java.util.Optional;

import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.resource.Resource;
Expand Down Expand Up @@ -73,13 +74,16 @@ protected void store(Optional<R> container, EObject candidate) {
if (!container.isPresent()) {
return;
}
EReference reference = candidate.eClass().getEAllReferences().stream()//
.filter(r -> r.isContainer())//
.findFirst()//
.get();
EReference reference = containerEReference(candidate.eClass()).get();
candidate.eSet(reference, container.get());
Resource resource = candidate.eResource();
Optional.ofNullable(resource).ifPresent(r -> LocWokbench.save(r));
Optional.ofNullable(resource).ifPresent(LocWokbench::save);
}

private Optional<EReference> containerEReference(EClass eClass) {
return eClass.getEAllReferences().stream()//
.filter(EReference::isContainer)//
.findFirst();
}

}
Loading