Skip to content

Commit

Permalink
FORGE-1684 Ported MetawidgetInspectorFacade from Forge 1
Browse files Browse the repository at this point in the history
  • Loading branch information
VineetReynolds committed Mar 23, 2014
1 parent 2f1bf1a commit a851adf
Show file tree
Hide file tree
Showing 27 changed files with 2,329 additions and 4 deletions.
15 changes: 15 additions & 0 deletions scaffold/api/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,20 @@
<artifactId>projects</artifactId>
<classifier>forge-addon</classifier>
</dependency>
<dependency>
<groupId>org.jboss.forge.addon</groupId>
<artifactId>parser-java</artifactId>
<classifier>forge-addon</classifier>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.forge.addon</groupId>
<artifactId>javaee-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.metawidget.modules</groupId>
<artifactId>metawidget-all</artifactId>
</dependency>
</dependencies>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
/**
* Copyright 2013 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Eclipse Public License version 1.0, available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.jboss.forge.addon.scaffold.metawidget;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.inject.Inject;

import org.jboss.forge.addon.scaffold.spi.ScaffoldProvider;
import org.jboss.forge.addon.projects.Project;
import org.jboss.forge.parser.java.JavaClass;
import org.jboss.forge.addon.scaffold.metawidget.inspector.ForgeInspector;
import org.jboss.forge.addon.scaffold.metawidget.inspector.ForgeInspectorConfig;
import org.jboss.forge.addon.scaffold.metawidget.inspector.propertystyle.ForgePropertyStyle;
import org.jboss.forge.addon.scaffold.metawidget.inspector.propertystyle.ForgePropertyStyleConfig;
import org.metawidget.inspector.beanvalidation.BeanValidationInspector;
import org.metawidget.inspector.composite.CompositeInspector;
import org.metawidget.inspector.composite.CompositeInspectorConfig;
import org.metawidget.inspector.jpa.JpaInspector;
import org.metawidget.inspector.jpa.JpaInspectorConfig;
import org.metawidget.inspector.propertytype.PropertyTypeInspector;
import org.metawidget.util.XmlUtils;
import org.w3c.dom.Element;

/**
* A facade for Metawidget inspectors. This class wraps Metawidget API invocations for {@link ScaffoldProvider}
* instances to invoke.
*
* @author Vineet Reynolds
*
*/
public class MetawidgetInspectorFacade
{

private Project project;
private CompositeInspector compositeInspector;

@Inject
public MetawidgetInspectorFacade(Project project)
{
this.project = project;
}

/**
* Inspects a {@link JavaClass} instance and provides inspection results in return.
*
* @param klass The {@link JavaClass} to inspect.
* @return A list representing inspection results for the {@link JavaClass}. Each list item corresponds to the
* inspection result for every property of the provided {@link JavaClass}.
*/
public List<Map<String, String>> inspect(JavaClass klass)
{
setupCompositeInspector();
Element inspectionResult = compositeInspector.inspectAsDom(null, klass.getQualifiedName(), (String[]) null);
Element inspectedEntity = XmlUtils.getFirstChildElement(inspectionResult);

Element inspectedProperty = XmlUtils.getFirstChildElement(inspectedEntity);
List<Map<String, String>> viewPropertyAttributes = new ArrayList<Map<String, String>>();
while (inspectedProperty != null)
{
Map<String, String> propertyAttributes = XmlUtils.getAttributesAsMap(inspectedProperty);
viewPropertyAttributes.add(propertyAttributes);
inspectedProperty = XmlUtils.getNextSiblingElement(inspectedProperty);
}
return viewPropertyAttributes;
}

/**
* Setup the composite inspector. This is not done at construction time, since Metawidget inspectors cache trait
* lookups, and hence report incorrect values when underlying Java classes change in projects. Therefore, the
* composite inspector setup and configuration is perform explicitly upon every inspection.
*/
private void setupCompositeInspector()
{
ForgePropertyStyleConfig forgePropertyStyleConfig = new ForgePropertyStyleConfig();
forgePropertyStyleConfig.setProject(this.project);
ForgeInspectorConfig forgeInspectorConfig = new ForgeInspectorConfig();
forgeInspectorConfig.setProject(this.project);
forgeInspectorConfig.setPropertyStyle(new ForgePropertyStyle(forgePropertyStyleConfig));

PropertyTypeInspector propertyTypeInspector = new PropertyTypeInspector(forgeInspectorConfig);

ForgeInspector forgeInspector = new ForgeInspector(forgeInspectorConfig);

JpaInspectorConfig jpaInspectorConfig = new JpaInspectorConfig();
jpaInspectorConfig.setHideIds(true);
jpaInspectorConfig.setHideVersions(true);
jpaInspectorConfig.setHideTransients(true);
jpaInspectorConfig.setPropertyStyle(new ForgePropertyStyle(forgePropertyStyleConfig));
JpaInspector jpaInspector = new JpaInspector(jpaInspectorConfig);

BeanValidationInspector beanValidationInspector = new BeanValidationInspector(forgeInspectorConfig);

CompositeInspectorConfig compositeInspectorConfig = new CompositeInspectorConfig();
compositeInspectorConfig.setInspectors(propertyTypeInspector, forgeInspector, jpaInspector,
beanValidationInspector);
compositeInspector = new CompositeInspector(compositeInspectorConfig);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
/*
* Copyright 2012 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Eclipse Public License version 1.0, available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.jboss.forge.addon.scaffold.metawidget.inspector;

/**
* Forge-specific element and attribute names appearing in DOMs conforming to inspection-result-1.0.xsd.
*
* @author Richard Kennard
*/

public final class ForgeInspectionResultConstants
{
//
// Public statics
//

public static final String N_TO_MANY = "n-to-many";

public static final String ONE_TO_ONE = "one-to-one";

public static final String MANY_TO_ONE = "many-to-one";

public static final String JPA_ONE_TO_ONE = "one-to-one";

public static final String JPA_MANY_TO_ONE = "many-to-one";

public static final String JPA_ONE_TO_MANY = "one-to-many";

public static final String JPA_MANY_TO_MANY = "many-to-many";

public static final String JPA_REL_TYPE = "jpa-relation-type";

/**
* Whether the field is an Id.
*/

public static final String PRIMARY_KEY = "primary-key";

/**
* The reverse primary key of a ManyToOne relationship.
*/

public static final String REVERSE_PRIMARY_KEY = "reverse-primary-key";

/**
* Whether the field represents a generated value
*/
public static final String GENERATED_VALUE = "generated-value";

/**
* The owning field of a bi-directional relationship
*/
public static final String OWNING_FIELD = "owning-field";

/**
* The inverse field of a bi-directional relationship
*/
public static final String INVERSE_FIELD = "inverse-field";

/**
* Indicates whether a field is to be displayed inline or not.
* Usually used for JPA Embedded/Embeddable types.
*/
public static final String EMBEDDABLE = "embeddable";

//
// Private constructor
//

private ForgeInspectionResultConstants()
{
// Can never be called
}
}
Loading

0 comments on commit a851adf

Please sign in to comment.