Skip to content

Commit

Permalink
Merge pull request #237 from gastaldi/master
Browse files Browse the repository at this point in the history
FORGE-275
  • Loading branch information
gastaldi committed Nov 7, 2012
2 parents d508cb1 + 9216ed4 commit c5e221d
Show file tree
Hide file tree
Showing 4 changed files with 128 additions and 4 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
/*
* 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.resources;

import java.util.List;

/**
* If a {@link Resource} is deleted, and the {@link Resource} object implements this interface, the methods of this
* interface will be called.
*
* @author <a href="mailto:ggastald@redhat.com">George Gastaldi</a>
*
*/
public interface DeletionAware
{
/**
* Returns a {@link List} of {@link Resource} which do not need confirmation to delete
*
*/
List<Resource<?>> getResources();

/**
* Returns a {@link List} of {@link Resource} as candidates for deletion
*
*/
List<Resource<?>> getOptionalResources();
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,25 @@

package org.jboss.forge.resources.java;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.jboss.forge.parser.java.Field;
import org.jboss.forge.parser.java.FieldHolder;
import org.jboss.forge.parser.java.JavaClass;
import org.jboss.forge.parser.java.JavaSource;
import org.jboss.forge.parser.java.Method;
import org.jboss.forge.parser.java.util.Strings;
import org.jboss.forge.resources.DeletionAware;
import org.jboss.forge.resources.Resource;
import org.jboss.forge.resources.ResourceFlag;

/**
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*/
public class JavaFieldResource extends JavaMemberResource<Field<? extends JavaSource<?>>>
public class JavaFieldResource extends JavaMemberResource<Field<? extends JavaSource<?>>> implements
DeletionAware
{
private final Field<? extends JavaSource<?>> field;

Expand Down Expand Up @@ -83,4 +89,31 @@ public boolean delete(final boolean recursive) throws UnsupportedOperationExcept
{
return delete();
}

@Override
public List<Resource<?>> getResources()
{
return null;
}

@Override
public List<Resource<?>> getOptionalResources()
{
List<Resource<?>> result = new ArrayList<Resource<?>>();
JavaClass entity = (JavaClass) field.getOrigin();
String methodNameSuffix = Strings.capitalize(field.getName());
// Condition to remove getField()
if (entity.hasMethodSignature("get" + methodNameSuffix))
{
Method<JavaClass> method = entity.getMethod("get" + methodNameSuffix);
result.add(new JavaMethodResource(this.getParent(), method));
}
// Condition to remove setField()
if (entity.hasMethodSignature("set" + methodNameSuffix, field.getQualifiedType()))
{
Method<JavaClass> method = entity.getMethod("set" + methodNameSuffix, field.getQualifiedType());
result.add(new JavaMethodResource(this.getParent(), method));
}
return result;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,11 @@
*/
package org.jboss.forge.shell.plugins.builtin;

import java.util.List;

import javax.inject.Inject;

import org.jboss.forge.resources.DeletionAware;
import org.jboss.forge.resources.Resource;
import org.jboss.forge.shell.Shell;
import org.jboss.forge.shell.plugins.Alias;
Expand Down Expand Up @@ -41,13 +44,42 @@ public void rm(
{
for (Resource<?> resource : paths)
{
if (force || shell.promptBoolean("delete: " + resource.getName() + ": are you sure?"))
deleteResource(recursive, force, resource);
}
}

private void deleteResource(final boolean recursive, final boolean force, Resource<?> resource)
{
if (force
|| shell.promptBoolean("delete: " + resource.getName() + ": are you sure?",
true))
{
if (!resource.delete(recursive))
{
if (!resource.delete(recursive))
throw new RuntimeException("error deleting " + resource);
}

if (resource instanceof DeletionAware)
{
List<Resource<?>> toDeleteResources = ((DeletionAware) resource).getResources();
List<Resource<?>> toDeleteOptionalResources = ((DeletionAware) resource)
.getOptionalResources();
if (toDeleteResources != null)
{
throw new RuntimeException("error deleting files.");
for (Resource<?> deletionResource : toDeleteResources)
{
deleteResource(recursive, true, deletionResource);
}
}
if (toDeleteOptionalResources != null)
{
for (Resource<?> deletionResource : toDeleteOptionalResources)
{
deleteResource(recursive, force, deletionResource);
}
}
}

}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,14 @@
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import java.util.List;

import org.jboss.arquillian.junit.Arquillian;
import org.jboss.forge.parser.JavaParser;
import org.jboss.forge.parser.java.JavaClass;
import org.jboss.forge.project.Project;
import org.jboss.forge.project.facets.JavaSourceFacet;
import org.jboss.forge.resources.java.JavaResource;
import org.jboss.forge.shell.Shell;
import org.jboss.forge.test.AbstractShellTest;
import org.junit.Test;
Expand Down Expand Up @@ -43,4 +49,25 @@ public void testCanRmRF() throws Exception
assertFalse(project.getProjectRoot().getChild("f o o").exists());
}

@Test
public void testRmField() throws Exception
{
Project project = initializeJavaProject();
Shell shell = getShell();
JavaSourceFacet java = project.getFacet(JavaSourceFacet.class);
JavaClass javaClass = JavaParser
.parse(JavaClass.class,
"public class MyClass { private String aField; public String getAField() {return aField;} public void setAField(String field){this.aField = field;}}");
javaClass.setPackage("org.example");
JavaResource javaResource = java.saveJavaSource(javaClass);
shell.setCurrentResource(javaResource);

// Execute SUT
queueInputLines("y", "y", "y");
shell.execute("rm aField");

// Check results
List<?> members = javaResource.getJavaSource().getMembers();
assertTrue(members.isEmpty());
}
}

0 comments on commit c5e221d

Please sign in to comment.