Skip to content

Commit

Permalink
Improved NewFieldCommand
Browse files Browse the repository at this point in the history
  • Loading branch information
gastaldi committed Jun 4, 2013
1 parent ceaf0b3 commit e817b0c
Show file tree
Hide file tree
Showing 3 changed files with 111 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,30 +7,53 @@

package org.jboss.forge.addon.javaee.jpa.ui;

import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;

import javax.inject.Inject;
import javax.persistence.Entity;

import org.jboss.forge.addon.convert.Converter;
import org.jboss.forge.addon.javaee.ui.AbstractProjectUICommand;
import org.jboss.forge.addon.parser.java.facets.JavaSourceFacet;
import org.jboss.forge.addon.parser.java.resources.JavaResource;
import org.jboss.forge.addon.parser.java.resources.JavaResourceVisitor;
import org.jboss.forge.addon.projects.Project;
import org.jboss.forge.addon.ui.context.UIBuilder;
import org.jboss.forge.addon.ui.context.UIContext;
import org.jboss.forge.addon.ui.hints.InputType;
import org.jboss.forge.addon.ui.input.InputComponent;
import org.jboss.forge.addon.ui.input.UICompleter;
import org.jboss.forge.addon.ui.input.UIInput;
import org.jboss.forge.addon.ui.input.UISelectOne;
import org.jboss.forge.addon.ui.metadata.WithAttributes;
import org.jboss.forge.addon.ui.result.NavigationResult;
import org.jboss.forge.addon.ui.result.Result;
import org.jboss.forge.addon.ui.result.Results;
import org.jboss.forge.addon.ui.util.Categories;
import org.jboss.forge.addon.ui.util.Metadata;
import org.jboss.forge.addon.ui.wizard.UIWizard;

public class NewFieldCommand extends AbstractProjectUICommand
public class NewFieldCommand extends AbstractProjectUICommand implements UIWizard
{

@Inject
@WithAttributes(label = "Field Name:", required = true)
@WithAttributes(label = "Entity", description = "The entity which the field will be created", required = true, type = InputType.SELECT_ONE_DROPDOWN)
private UISelectOne<JavaResource> entity;

@Inject
@WithAttributes(label = "Field Name", description = "The field name to be created in the target entity", required = true)
private UIInput<String> fieldName;

@Inject
@WithAttributes(label = "Type:", type = InputType.JAVA_CLASS_PICKER)
@WithAttributes(label = "Type", description = "The type intended to be used for this field", type = InputType.JAVA_CLASS_PICKER)
private UIInput<String> typeName;

@Inject
@WithAttributes(label = "Relationship", description = "The type of the relationship", type = InputType.SELECT_ONE_RADIO)
private UISelectOne<RelationshipType> relationshipType;

@Override
public Metadata getMetadata()
{
Expand All @@ -42,13 +65,66 @@ public Metadata getMetadata()
@Override
public void initializeUI(UIBuilder builder) throws Exception
{
builder.add(fieldName).add(typeName);
final List<JavaResource> entities = new ArrayList<JavaResource>();
Project project = getSelectedProject(builder.getUIContext());
if (project != null)
{
project.getFacet(JavaSourceFacet.class).visitJavaSources(new JavaResourceVisitor()
{

@Override
public void visit(JavaResource resource)
{
try
{
if (resource.getJavaSource().hasAnnotation(Entity.class))
{
entities.add(resource);
}
}
catch (FileNotFoundException e)
{
// ignore
}
}
});
}
entity.setValueChoices(entities);
relationshipType.setItemLabelConverter(new Converter<RelationshipType, String>()
{
@Override
public String convert(RelationshipType source)
{
return (source == null) ? null : source.getDescription();
}
});
fieldName.setCompleter(new UICompleter<String>()
{

@Override
public Iterable<String> getCompletionProposals(InputComponent<?, String> input, String value)
{
List<String> list = new ArrayList<String>();
for (int i = 0; i < 10; i++)
{
list.add(value + i);
}
return list;
}
});
relationshipType.setDefaultValue(RelationshipType.BASIC);
builder.add(entity).add(fieldName).add(typeName).add(relationshipType);
}

@Override
public Result execute(UIContext context) throws Exception
{
return Results.success("Field " + fieldName.getName() + " created");
return Results.success("Field " + fieldName.getValue() + " created");
}

@Override
public NavigationResult next(UIContext context) throws Exception
{
return null;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
/*
* 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.javaee.jpa.ui;

public enum RelationshipType
{
BASIC("Basic"),
ONE_TO_ONE("One-to-One"),
ONE_TO_MANY("One-to-Many"),
MANY_TO_ONE("Many-to-One"),
MANY_TO_MANY("Many-to-Many");

private RelationshipType(String description)
{
this.description = description;
}

private String description;

public String getDescription()
{
return description;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,7 @@ public boolean accept(Resource<?> resource)
{
visitSources(resource, visitor);
}
if (resource instanceof JavaResource)
else if (resource instanceof JavaResource)
{
visitor.visit((JavaResource) resource);
}
Expand Down

0 comments on commit e817b0c

Please sign in to comment.