/*******************************************************************************
* Copyright (c) 1998, 2015 Oracle and/or its affiliates. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* Oracle - initial API and implementation from Oracle TopLink
******************************************************************************/
package org.eclipse.persistence.tools.workbench.mappingsplugin.ui.descriptor.relational;
import org.eclipse.persistence.tools.workbench.framework.action.FrameworkAction;
import org.eclipse.persistence.tools.workbench.framework.action.ToggleFrameworkAction;
import org.eclipse.persistence.tools.workbench.framework.app.GroupContainerDescription;
import org.eclipse.persistence.tools.workbench.framework.app.MenuDescription;
import org.eclipse.persistence.tools.workbench.framework.app.MenuGroupDescription;
import org.eclipse.persistence.tools.workbench.framework.app.ToolBarButtonGroupDescription;
import org.eclipse.persistence.tools.workbench.framework.context.WorkbenchContext;
import org.eclipse.persistence.tools.workbench.mappingsmodel.MWQueryKey;
import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.MWMappingDescriptor;
import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.MWMapping;
import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.relational.MWAggregateMapping;
import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.relational.MWDirectToFieldMapping;
import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.relational.MWDirectToXmlTypeMapping;
import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.relational.MWManyToManyMapping;
import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.relational.MWOneToManyMapping;
import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.relational.MWOneToOneMapping;
import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.relational.MWRelationalDirectCollectionMapping;
import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.relational.MWRelationalDirectMapMapping;
import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.relational.MWRelationalTransformationMapping;
import org.eclipse.persistence.tools.workbench.mappingsmodel.mapping.relational.MWVariableOneToOneMapping;
import org.eclipse.persistence.tools.workbench.mappingsmodel.meta.MWClassAttribute;
import org.eclipse.persistence.tools.workbench.mappingsplugin.ui.descriptor.DescriptorPackageNode;
import org.eclipse.persistence.tools.workbench.mappingsplugin.ui.descriptor.MappingDescriptorNode;
import org.eclipse.persistence.tools.workbench.mappingsplugin.ui.mapping.MappingNode;
import org.eclipse.persistence.tools.workbench.mappingsplugin.ui.mapping.UnmappedMappingNode;
import org.eclipse.persistence.tools.workbench.mappingsplugin.ui.mapping.relational.AggregateMappingNode;
import org.eclipse.persistence.tools.workbench.mappingsplugin.ui.mapping.relational.DirectToFieldMappingNode;
import org.eclipse.persistence.tools.workbench.mappingsplugin.ui.mapping.relational.DirectToXmlTypeMappingNode;
import org.eclipse.persistence.tools.workbench.mappingsplugin.ui.mapping.relational.ManyToManyMappingNode;
import org.eclipse.persistence.tools.workbench.mappingsplugin.ui.mapping.relational.OneToManyMappingNode;
import org.eclipse.persistence.tools.workbench.mappingsplugin.ui.mapping.relational.OneToOneMappingNode;
import org.eclipse.persistence.tools.workbench.mappingsplugin.ui.mapping.relational.RelationalDirectCollectionMappingNode;
import org.eclipse.persistence.tools.workbench.mappingsplugin.ui.mapping.relational.RelationalDirectMapMappingNode;
import org.eclipse.persistence.tools.workbench.mappingsplugin.ui.mapping.relational.RelationalMappingSelectionActionsPolicy;
import org.eclipse.persistence.tools.workbench.mappingsplugin.ui.mapping.relational.RelationalTransformationMappingNode;
import org.eclipse.persistence.tools.workbench.mappingsplugin.ui.mapping.relational.VariableOneToOneMappingNode;
public abstract class RelationalClassDescriptorNode extends MappingDescriptorNode {
// ********** constructors/initialization **********
RelationalClassDescriptorNode(MWMappingDescriptor descriptor, DescriptorPackageNode parentNode) {
super(descriptor, parentNode);
}
// ********** ApplicationNode implementation **********
public GroupContainerDescription buildMenuDescription(WorkbenchContext context) {
GroupContainerDescription desc = super.buildMenuDescription(context);
context = buildLocalWorkbenchContext(context);
MenuGroupDescription classGroup = new MenuGroupDescription();
classGroup.add(getMappingsPlugin().getRefreshClassesAction(context));
classGroup.add(getMappingsPlugin().getAddOrRefreshClassesAction(context));
classGroup.add(getMappingsPlugin().getCreateNewClassAction(context));
desc.add(classGroup);
MenuGroupDescription removeRenameGroup = new MenuGroupDescription();
removeRenameGroup.add(getRemoveDescriptorAction(context));
removeRenameGroup.add(getRenameDescriptorAction(context));
removeRenameGroup.add(getMoveDescriptorAction(context));
desc.add(removeRenameGroup);
MenuGroupDescription inheritedMappingsGroup = new MenuGroupDescription();
inheritedMappingsGroup.add(buildMapInheritedAttributesMenuDescription(context));
inheritedMappingsGroup.add(buildUnmapMenuDescription(context));
desc.add(inheritedMappingsGroup);
MenuGroupDescription mappingsGroup = new MenuGroupDescription();
mappingsGroup.add(buildGenerateTablesFromDescriptorsMenuDescription(context));
mappingsGroup.add(getAutomapAction(context));
desc.add(mappingsGroup);
MenuGroupDescription exportJavaGroup = new MenuGroupDescription();
exportJavaGroup.add(getMappingsPlugin().getExportSpecificDescriptorModelJavaSourceAction(context));
desc.add(exportJavaGroup);
desc.add(buildOracleHelpMenuGroup(context));
return desc;
}
public GroupContainerDescription buildToolBarDescription(WorkbenchContext workbenchContext)
{
GroupContainerDescription desc = super.buildToolBarDescription(workbenchContext);
WorkbenchContext wrappedContext = buildLocalWorkbenchContext(workbenchContext);
ToolBarButtonGroupDescription buttonGroup = new ToolBarButtonGroupDescription();
buttonGroup.add(getMorphToAggregateDescriptorAction(wrappedContext));
buttonGroup.add(getMorphToTableDescriptorAction(wrappedContext));
desc.add(buttonGroup);
return desc;
}
protected boolean supportsDescriptorMorphing() {
return true;
}
protected MenuGroupDescription buildDescriptorTypeMenuGroupDescription(WorkbenchContext workbenchContext) {
MenuGroupDescription typeDesc = new MenuGroupDescription();
typeDesc.add(this.getMorphToAggregateDescriptorAction(workbenchContext));
typeDesc.add(this.getMorphToTableDescriptorAction(workbenchContext));
return typeDesc;
}
private ToggleFrameworkAction getMorphToAggregateDescriptorAction(WorkbenchContext workbenchContext)
{
return new AggregateDescriptorAction(workbenchContext);
}
private ToggleFrameworkAction getMorphToTableDescriptorAction(WorkbenchContext workbenchContext)
{
return new TableDescriptorAction(workbenchContext);
}
protected MenuDescription buildGenerateTablesFromDescriptorsMenuDescription(WorkbenchContext workbenchContext)
{
MenuDescription menuDesc = new MenuDescription(resourceRepository().getString("GENERATE_TABLES_FROM_DESCRIPTORS_MENU_ITEM"),
resourceRepository().getString("GENERATE_TABLES_FROM_DESCRIPTORS_MENU_ITEM"),
resourceRepository().getMnemonic("GENERATE_TABLES_FROM_DESCRIPTORS_MENU_ITEM"),
EMPTY_ICON
);
MenuGroupDescription groupDesc = new MenuGroupDescription();
groupDesc.add(getGenerateTablesFromAllDescriptorsAction(workbenchContext));
groupDesc.add(getGenerateTablesFromSelectedDescriptorsAction(workbenchContext));
menuDesc.add(groupDesc);
return menuDesc;
}
private FrameworkAction getGenerateTablesFromAllDescriptorsAction(WorkbenchContext workbenchContext) {
return new GenerateTablesFromAllDescriptorsAction(workbenchContext);
}
private FrameworkAction getGenerateTablesFromSelectedDescriptorsAction(WorkbenchContext workbenchContext) {
return new GenerateTablesFromSelectedDescriptorsAction(workbenchContext);
}
// ************** MappingDescriptorNode implementation ************
protected MappingNode buildMappingNode(MWMapping mapping) {
if (mapping instanceof MWDirectToFieldMapping) {
return new DirectToFieldMappingNode((MWDirectToFieldMapping) mapping, new RelationalMappingSelectionActionsPolicy(getMappingsPlugin()), this);
}
else if (mapping instanceof MWDirectToXmlTypeMapping) {
return new DirectToXmlTypeMappingNode((MWDirectToXmlTypeMapping) mapping, new RelationalMappingSelectionActionsPolicy(getMappingsPlugin()), this);
}
else if (mapping instanceof MWRelationalDirectCollectionMapping) {
return new RelationalDirectCollectionMappingNode((MWRelationalDirectCollectionMapping) mapping, new RelationalMappingSelectionActionsPolicy(getMappingsPlugin()), this);
}
else if (mapping instanceof MWRelationalDirectMapMapping) {
return new RelationalDirectMapMappingNode((MWRelationalDirectMapMapping) mapping, new RelationalMappingSelectionActionsPolicy(getMappingsPlugin()), this);
}
else if (mapping instanceof MWAggregateMapping) {
return new AggregateMappingNode((MWAggregateMapping) mapping, new RelationalMappingSelectionActionsPolicy(getMappingsPlugin()), this);
}
else if (mapping instanceof MWOneToOneMapping) {
return new OneToOneMappingNode((MWOneToOneMapping) mapping, new RelationalMappingSelectionActionsPolicy(getMappingsPlugin()), this);
}
else if (mapping instanceof MWVariableOneToOneMapping) {
return new VariableOneToOneMappingNode((MWVariableOneToOneMapping) mapping, new RelationalMappingSelectionActionsPolicy(getMappingsPlugin()), this);
}
else if (mapping instanceof MWOneToManyMapping) {
return new OneToManyMappingNode((MWOneToManyMapping) mapping, new RelationalMappingSelectionActionsPolicy(getMappingsPlugin()), this);
}
else if (mapping instanceof MWManyToManyMapping) {
return new ManyToManyMappingNode((MWManyToManyMapping) mapping, new RelationalMappingSelectionActionsPolicy(getMappingsPlugin()), this);
}
else if (mapping instanceof MWRelationalTransformationMapping) {
return new RelationalTransformationMappingNode((MWRelationalTransformationMapping) mapping, new RelationalMappingSelectionActionsPolicy(getMappingsPlugin()), this);
}
throw new IllegalArgumentException(mapping.toString());
}
protected MappingNode buildUnmappedMappingNode(MWClassAttribute attribute) {
return new UnmappedMappingNode(attribute, getApplicationContext(), new RelationalMappingSelectionActionsPolicy(getMappingsPlugin()), this);
}
public String mappingHelpTopicPrefix() {
// return "mapping.relational";
return "mapping"; // For 10.1.3
}
public abstract void selectQueryKey(MWQueryKey queryKey, WorkbenchContext context);
}