Fix bean editor issues.

This commit is contained in:
robin shine 2013-09-22 08:56:28 +08:00
parent 426b02af5a
commit a4c7cc6cd5
25 changed files with 126 additions and 10 deletions

View File

@ -17,7 +17,7 @@ public class NumericPropertyEditContext extends PropertyEditContext {
public NumericPropertyEditContext(Serializable bean, String propertyName) { public NumericPropertyEditContext(Serializable bean, String propertyName) {
super(bean, propertyName); super(bean, propertyName);
Integer propertyValue = (Integer) getPropertyValue(); Serializable propertyValue = getPropertyValue();
if (propertyValue != null) if (propertyValue != null)
inputModel = new Model<String>(propertyValue.toString()); inputModel = new Model<String>(propertyValue.toString());
else else
@ -45,10 +45,15 @@ public class NumericPropertyEditContext extends PropertyEditContext {
@Override @Override
protected void doValidation() { protected void doValidation() {
String input = inputModel.getObject(); String input = inputModel.getObject();
Integer convertedInput;
Serializable convertedInput;
try { try {
if (input != null) { if (input != null) {
if (getPropertyGetter().getReturnType() == int.class || getPropertyGetter().getReturnType() == Integer.class)
convertedInput = Integer.valueOf(input); convertedInput = Integer.valueOf(input);
else
convertedInput = Long.valueOf(input);
} else { } else {
convertedInput = null; convertedInput = null;
} }

View File

@ -4,7 +4,10 @@ import java.util.List;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import com.pmease.commons.editable.annotation.Editable;
@SuppressWarnings("serial") @SuppressWarnings("serial")
@Editable
public abstract class AbstractGateKeeper implements GateKeeper { public abstract class AbstractGateKeeper implements GateKeeper {
@Override @Override

View File

@ -1,8 +1,10 @@
package com.pmease.gitop.core.gatekeeper; package com.pmease.gitop.core.gatekeeper;
import com.pmease.commons.editable.annotation.Editable;
import com.pmease.gitop.core.model.MergeRequest; import com.pmease.gitop.core.model.MergeRequest;
@SuppressWarnings("serial") @SuppressWarnings("serial")
@Editable
public class AlwaysAccept extends AbstractGateKeeper { public class AlwaysAccept extends AbstractGateKeeper {
@Override @Override

View File

@ -3,11 +3,16 @@ package com.pmease.gitop.core.gatekeeper;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import com.pmease.commons.editable.annotation.Editable;
import com.pmease.commons.util.trimmable.AndOrConstruct; import com.pmease.commons.util.trimmable.AndOrConstruct;
import com.pmease.commons.util.trimmable.TrimUtils; import com.pmease.commons.util.trimmable.TrimUtils;
import com.pmease.gitop.core.model.MergeRequest; import com.pmease.gitop.core.model.MergeRequest;
@SuppressWarnings("serial") @SuppressWarnings("serial")
@Editable(name="All sub gate keepers accept")
public class AndGateKeeper extends AbstractGateKeeper { public class AndGateKeeper extends AbstractGateKeeper {
private List<GateKeeper> gateKeepers = new ArrayList<GateKeeper>(); private List<GateKeeper> gateKeepers = new ArrayList<GateKeeper>();
@ -16,6 +21,9 @@ public class AndGateKeeper extends AbstractGateKeeper {
this.gateKeepers = gateKeepers; this.gateKeepers = gateKeepers;
} }
@Editable(name="Sub Gate Keepers")
@NotNull
@Size(min=1, message="At least one element has to be added.")
public List<GateKeeper> getGateKeepers() { public List<GateKeeper> getGateKeepers() {
return gateKeepers; return gateKeepers;
} }

View File

@ -2,11 +2,13 @@ package com.pmease.gitop.core.gatekeeper;
import java.util.Collection; import java.util.Collection;
import com.pmease.commons.editable.annotation.Editable;
import com.pmease.gitop.core.model.MergeRequest; import com.pmease.gitop.core.model.MergeRequest;
import com.pmease.gitop.core.model.User; import com.pmease.gitop.core.model.User;
import com.pmease.gitop.core.permission.operation.RepositoryOperation; import com.pmease.gitop.core.permission.operation.RepositoryOperation;
@SuppressWarnings("serial") @SuppressWarnings("serial")
@Editable
public class ApprovedByAuthorizedUsers extends AbstractGateKeeper { public class ApprovedByAuthorizedUsers extends AbstractGateKeeper {
@Override @Override

View File

@ -1,8 +1,10 @@
package com.pmease.gitop.core.gatekeeper; package com.pmease.gitop.core.gatekeeper;
import com.pmease.commons.editable.annotation.Editable;
import com.pmease.gitop.core.model.MergeRequest; import com.pmease.gitop.core.model.MergeRequest;
@SuppressWarnings("serial") @SuppressWarnings("serial")
@Editable
public class ApprovedByMajoritiesOfSpecifiedTeam extends TeamAwareGateKeeper { public class ApprovedByMajoritiesOfSpecifiedTeam extends TeamAwareGateKeeper {
@Override @Override

View File

@ -1,11 +1,13 @@
package com.pmease.gitop.core.gatekeeper; package com.pmease.gitop.core.gatekeeper;
import com.pmease.commons.editable.annotation.Editable;
import com.pmease.commons.util.EasySet; import com.pmease.commons.util.EasySet;
import com.pmease.gitop.core.model.MergeRequest; import com.pmease.gitop.core.model.MergeRequest;
import com.pmease.gitop.core.model.User; import com.pmease.gitop.core.model.User;
import com.pmease.gitop.core.model.Vote; import com.pmease.gitop.core.model.Vote;
@SuppressWarnings("serial") @SuppressWarnings("serial")
@Editable
public class ApprovedByRepositoryOwner extends AbstractGateKeeper { public class ApprovedByRepositoryOwner extends AbstractGateKeeper {
@Override @Override

View File

@ -5,17 +5,20 @@ import java.util.HashSet;
import javax.validation.constraints.Min; import javax.validation.constraints.Min;
import com.pmease.commons.editable.annotation.Editable;
import com.pmease.gitop.core.model.MergeRequest; import com.pmease.gitop.core.model.MergeRequest;
import com.pmease.gitop.core.model.TeamMembership; import com.pmease.gitop.core.model.TeamMembership;
import com.pmease.gitop.core.model.User; import com.pmease.gitop.core.model.User;
import com.pmease.gitop.core.model.Vote; import com.pmease.gitop.core.model.Vote;
@SuppressWarnings("serial") @SuppressWarnings("serial")
@Editable
public class ApprovedBySpecifiedTeam extends TeamAwareGateKeeper { public class ApprovedBySpecifiedTeam extends TeamAwareGateKeeper {
private int leastApprovals = 1; private int leastApprovals = 1;
@Min(1) @Editable
@Min(value=1, message="Least approvals should not be less than 1.")
public int getLeastApprovals() { public int getLeastApprovals() {
return leastApprovals; return leastApprovals;
} }

View File

@ -1,5 +1,8 @@
package com.pmease.gitop.core.gatekeeper; package com.pmease.gitop.core.gatekeeper;
import javax.validation.constraints.NotNull;
import com.pmease.commons.editable.annotation.Editable;
import com.pmease.commons.loader.AppLoader; import com.pmease.commons.loader.AppLoader;
import com.pmease.commons.util.EasySet; import com.pmease.commons.util.EasySet;
import com.pmease.gitop.core.manager.UserManager; import com.pmease.gitop.core.manager.UserManager;
@ -8,10 +11,13 @@ import com.pmease.gitop.core.model.User;
import com.pmease.gitop.core.model.Vote; import com.pmease.gitop.core.model.Vote;
@SuppressWarnings("serial") @SuppressWarnings("serial")
@Editable
public class ApprovedBySpecifiedUser extends AbstractGateKeeper { public class ApprovedBySpecifiedUser extends AbstractGateKeeper {
private Long userId; private Long userId;
@Editable
@NotNull
public Long getUserId() { public Long getUserId() {
return userId; return userId;
} }

View File

@ -2,9 +2,11 @@ package com.pmease.gitop.core.gatekeeper;
import java.io.Serializable; import java.io.Serializable;
import com.pmease.commons.editable.annotation.Editable;
import com.pmease.commons.util.trimmable.Trimmable; import com.pmease.commons.util.trimmable.Trimmable;
import com.pmease.gitop.core.model.MergeRequest; import com.pmease.gitop.core.model.MergeRequest;
@Editable
public interface GateKeeper extends Trimmable, Serializable { public interface GateKeeper extends Trimmable, Serializable {
CheckResult check(MergeRequest request); CheckResult check(MergeRequest request);

View File

@ -5,19 +5,22 @@ import java.util.HashSet;
import javax.validation.constraints.Min; import javax.validation.constraints.Min;
import com.pmease.commons.editable.annotation.Editable;
import com.pmease.gitop.core.model.MergeRequest; import com.pmease.gitop.core.model.MergeRequest;
import com.pmease.gitop.core.model.TeamMembership; import com.pmease.gitop.core.model.TeamMembership;
import com.pmease.gitop.core.model.User; import com.pmease.gitop.core.model.User;
import com.pmease.gitop.core.model.Vote; import com.pmease.gitop.core.model.Vote;
@SuppressWarnings("serial") @SuppressWarnings("serial")
@Editable
public class GetMinScoreFromSpecifiedTeam extends TeamAwareGateKeeper { public class GetMinScoreFromSpecifiedTeam extends TeamAwareGateKeeper {
private int minScore = 1; private int minScore = 1;
private boolean requireVoteOfAllMembers; private boolean requireVoteOfAllMembers;
@Min(1) @Editable
@Min(value=1, message="Min score should not be less than 1.")
public int getMinScore() { public int getMinScore() {
return minScore; return minScore;
} }

View File

@ -1,8 +1,10 @@
package com.pmease.gitop.core.gatekeeper; package com.pmease.gitop.core.gatekeeper;
import com.pmease.commons.editable.annotation.Editable;
import com.pmease.gitop.core.model.MergeRequest; import com.pmease.gitop.core.model.MergeRequest;
@SuppressWarnings("serial") @SuppressWarnings("serial")
@Editable
public class HasSourceBranch extends AbstractGateKeeper { public class HasSourceBranch extends AbstractGateKeeper {
@Override @Override

View File

@ -2,15 +2,18 @@ package com.pmease.gitop.core.gatekeeper;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import com.pmease.commons.editable.annotation.Editable;
import com.pmease.gitop.core.model.MergeRequest; import com.pmease.gitop.core.model.MergeRequest;
@SuppressWarnings("serial") @SuppressWarnings("serial")
@Editable
public class IfThenGateKeeper extends AbstractGateKeeper { public class IfThenGateKeeper extends AbstractGateKeeper {
private GateKeeper ifGate; private GateKeeper ifGate;
private GateKeeper thenGate; private GateKeeper thenGate;
@Editable
@NotNull @NotNull
public GateKeeper getIfGate() { public GateKeeper getIfGate() {
return ifGate; return ifGate;
@ -20,6 +23,7 @@ public class IfThenGateKeeper extends AbstractGateKeeper {
this.ifGate = ifGate; this.ifGate = ifGate;
} }
@Editable
@NotNull @NotNull
public GateKeeper getThenGate() { public GateKeeper getThenGate() {
return thenGate; return thenGate;

View File

@ -1,8 +1,10 @@
package com.pmease.gitop.core.gatekeeper; package com.pmease.gitop.core.gatekeeper;
import com.pmease.commons.editable.annotation.Editable;
import com.pmease.gitop.core.model.MergeRequest; import com.pmease.gitop.core.model.MergeRequest;
@SuppressWarnings("serial") @SuppressWarnings("serial")
@Editable
public class IsFastForward extends AbstractGateKeeper { public class IsFastForward extends AbstractGateKeeper {
@Override @Override

View File

@ -1,8 +1,10 @@
package com.pmease.gitop.core.gatekeeper; package com.pmease.gitop.core.gatekeeper;
import com.pmease.commons.editable.annotation.Editable;
import com.pmease.gitop.core.model.MergeRequest; import com.pmease.gitop.core.model.MergeRequest;
@SuppressWarnings("serial") @SuppressWarnings("serial")
@Editable
public class NeverAccept extends AbstractGateKeeper { public class NeverAccept extends AbstractGateKeeper {
@Override @Override

View File

@ -1,10 +1,12 @@
package com.pmease.gitop.core.gatekeeper; package com.pmease.gitop.core.gatekeeper;
import com.pmease.commons.editable.annotation.Editable;
import com.pmease.gitop.core.model.MergeRequest; import com.pmease.gitop.core.model.MergeRequest;
import com.pmease.gitop.core.model.TeamMembership; import com.pmease.gitop.core.model.TeamMembership;
import com.pmease.gitop.core.model.Vote; import com.pmease.gitop.core.model.Vote;
@SuppressWarnings("serial") @SuppressWarnings("serial")
@Editable
public class NoRejectionBySpecifiedTeam extends TeamAwareGateKeeper { public class NoRejectionBySpecifiedTeam extends TeamAwareGateKeeper {
@Override @Override

View File

@ -1,12 +1,18 @@
package com.pmease.gitop.core.gatekeeper; package com.pmease.gitop.core.gatekeeper;
import javax.validation.constraints.NotNull;
import com.pmease.commons.editable.annotation.Editable;
import com.pmease.gitop.core.model.MergeRequest; import com.pmease.gitop.core.model.MergeRequest;
@SuppressWarnings("serial") @SuppressWarnings("serial")
@Editable
public class NotGateKeeper extends AbstractGateKeeper { public class NotGateKeeper extends AbstractGateKeeper {
private GateKeeper gateKeeper; private GateKeeper gateKeeper;
@Editable
@NotNull
public GateKeeper getGateKeeper() { public GateKeeper getGateKeeper() {
return gateKeeper; return gateKeeper;
} }

View File

@ -3,16 +3,24 @@ package com.pmease.gitop.core.gatekeeper;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import com.pmease.commons.editable.annotation.Editable;
import com.pmease.commons.util.trimmable.AndOrConstruct; import com.pmease.commons.util.trimmable.AndOrConstruct;
import com.pmease.commons.util.trimmable.TrimUtils; import com.pmease.commons.util.trimmable.TrimUtils;
import com.pmease.commons.util.trimmable.Trimmable; import com.pmease.commons.util.trimmable.Trimmable;
import com.pmease.gitop.core.model.MergeRequest; import com.pmease.gitop.core.model.MergeRequest;
@SuppressWarnings("serial") @SuppressWarnings("serial")
@Editable(name="Any sub gate keeper accepts")
public class OrGateKeeper extends AbstractGateKeeper { public class OrGateKeeper extends AbstractGateKeeper {
private List<GateKeeper> gateKeepers = new ArrayList<GateKeeper>(); private List<GateKeeper> gateKeepers = new ArrayList<GateKeeper>();
@Editable(name="Sub Gate Keepers")
@NotNull
@Size(min=1, message="At least one element has to be added.")
public List<GateKeeper> getGateKeepers() { public List<GateKeeper> getGateKeepers() {
return gateKeepers; return gateKeepers;
} }

View File

@ -1,6 +1,9 @@
package com.pmease.gitop.core.gatekeeper; package com.pmease.gitop.core.gatekeeper;
import javax.validation.constraints.NotNull;
import com.google.common.base.Preconditions; import com.google.common.base.Preconditions;
import com.pmease.commons.editable.annotation.Editable;
import com.pmease.commons.loader.AppLoader; import com.pmease.commons.loader.AppLoader;
import com.pmease.commons.util.namedentity.EntityLoader; import com.pmease.commons.util.namedentity.EntityLoader;
import com.pmease.commons.util.namedentity.EntityMatcher; import com.pmease.commons.util.namedentity.EntityMatcher;
@ -12,10 +15,13 @@ import com.pmease.gitop.core.model.MergeRequest;
import com.pmease.gitop.core.model.Repository; import com.pmease.gitop.core.model.Repository;
@SuppressWarnings("serial") @SuppressWarnings("serial")
@Editable
public class SubmittedToSpecifiedBranch extends AbstractGateKeeper { public class SubmittedToSpecifiedBranch extends AbstractGateKeeper {
private String branchPatterns; private String branchPatterns;
@Editable
@NotNull
public String getBranchPatterns() { public String getBranchPatterns() {
return branchPatterns; return branchPatterns;
} }

View File

@ -1,8 +1,10 @@
package com.pmease.gitop.core.gatekeeper; package com.pmease.gitop.core.gatekeeper;
import com.pmease.commons.editable.annotation.Editable;
import com.pmease.gitop.core.model.MergeRequest; import com.pmease.gitop.core.model.MergeRequest;
@SuppressWarnings("serial") @SuppressWarnings("serial")
@Editable
public class SubmittedViaPush extends AbstractGateKeeper { public class SubmittedViaPush extends AbstractGateKeeper {
@Override @Override

View File

@ -1,5 +1,8 @@
package com.pmease.gitop.core.gatekeeper; package com.pmease.gitop.core.gatekeeper;
import javax.validation.constraints.NotNull;
import com.pmease.commons.editable.annotation.Editable;
import com.pmease.gitop.core.Gitop; import com.pmease.gitop.core.Gitop;
import com.pmease.gitop.core.manager.TeamManager; import com.pmease.gitop.core.manager.TeamManager;
import com.pmease.gitop.core.model.Team; import com.pmease.gitop.core.model.Team;
@ -9,6 +12,8 @@ public abstract class TeamAwareGateKeeper extends AbstractGateKeeper {
private Long teamId; private Long teamId;
@Editable
@NotNull
public Long getTeamId() { public Long getTeamId() {
return teamId; return teamId;
} }

View File

@ -5,6 +5,7 @@ import java.util.Collection;
import org.hibernate.validator.constraints.NotEmpty; import org.hibernate.validator.constraints.NotEmpty;
import com.pmease.commons.editable.annotation.Editable;
import com.pmease.commons.git.FindChangedFilesCommand; import com.pmease.commons.git.FindChangedFilesCommand;
import com.pmease.commons.git.Git; import com.pmease.commons.git.Git;
import com.pmease.commons.loader.AppLoader; import com.pmease.commons.loader.AppLoader;
@ -14,10 +15,12 @@ import com.pmease.gitop.core.model.MergeRequest;
import com.pmease.gitop.core.model.MergeRequestUpdate; import com.pmease.gitop.core.model.MergeRequestUpdate;
@SuppressWarnings("serial") @SuppressWarnings("serial")
@Editable
public class TouchSpecifiedFiles extends AbstractGateKeeper { public class TouchSpecifiedFiles extends AbstractGateKeeper {
private String filePaths; private String filePaths;
@Editable
@NotEmpty @NotEmpty
public String getFilePaths() { public String getFilePaths() {
return filePaths; return filePaths;

View File

@ -13,6 +13,7 @@ import javax.persistence.OneToMany;
import javax.persistence.Table; import javax.persistence.Table;
import javax.persistence.UniqueConstraint; import javax.persistence.UniqueConstraint;
import com.pmease.commons.editable.annotation.Editable;
import com.pmease.commons.hibernate.AbstractEntity; import com.pmease.commons.hibernate.AbstractEntity;
import com.pmease.gitop.core.Gitop; import com.pmease.gitop.core.Gitop;
import com.pmease.gitop.core.gatekeeper.GateKeeper; import com.pmease.gitop.core.gatekeeper.GateKeeper;
@ -27,6 +28,7 @@ import com.pmease.gitop.core.permission.operation.RepositoryOperation;
@UniqueConstraint(columnNames={"owner", "name"}) @UniqueConstraint(columnNames={"owner", "name"})
}) })
@SuppressWarnings("serial") @SuppressWarnings("serial")
@Editable
public class Repository extends AbstractEntity implements UserBelonging { public class Repository extends AbstractEntity implements UserBelonging {
@ManyToOne @ManyToOne
@ -61,6 +63,7 @@ public class Repository extends AbstractEntity implements UserBelonging {
this.owner = owner; this.owner = owner;
} }
@Editable
public String getName() { public String getName() {
return name; return name;
} }
@ -69,6 +72,7 @@ public class Repository extends AbstractEntity implements UserBelonging {
this.name = name; this.name = name;
} }
@Editable
public String getDescription() { public String getDescription() {
return description; return description;
} }
@ -77,6 +81,7 @@ public class Repository extends AbstractEntity implements UserBelonging {
this.description = description; this.description = description;
} }
@Editable
public boolean isPubliclyAccessible() { public boolean isPubliclyAccessible() {
return publiclyAccessible; return publiclyAccessible;
} }
@ -94,9 +99,8 @@ public class Repository extends AbstractEntity implements UserBelonging {
this.defaultAuthorizedOperation = defaultAuthorizedOperation; this.defaultAuthorizedOperation = defaultAuthorizedOperation;
} }
@Editable
public GateKeeper getGateKeeper() { public GateKeeper getGateKeeper() {
if (gateKeeper != null)
gateKeeper = (GateKeeper) gateKeeper.trim(this);
return gateKeeper; return gateKeeper;
} }

View File

@ -1,3 +1,8 @@
<wicket:extend> <wicket:extend>
<h1>Welcome Home!</h1> <div style="padding:100px;">
<form wicket:id="form">
<div wicket:id="editor"></div>
<input type="submit" value="Submit" class="btn btn-primary"></input>
</form>
</div>
</wicket:extend> </wicket:extend>

View File

@ -1,11 +1,38 @@
package com.pmease.gitop.web; package com.pmease.gitop.web;
import org.apache.commons.lang3.SerializationUtils;
import org.apache.wicket.markup.html.form.Form;
import com.pmease.commons.editable.EditContext;
import com.pmease.commons.wicket.editable.EditHelper;
import com.pmease.gitop.core.model.Repository;
@SuppressWarnings("serial") @SuppressWarnings("serial")
public class HomePage extends BasePage { public class HomePage extends BasePage {
private static Repository repository = new Repository();
@Override @Override
protected void onInitialize() { protected void onInitialize() {
super.onInitialize(); super.onInitialize();
final Repository cloned = SerializationUtils.clone(repository);
final EditContext editContext = EditHelper.getContext(cloned);
Form<?> form = new Form<Void>("form") {
@Override
protected void onSubmit() {
super.onSubmit();
editContext.validate();
if (!editContext.hasError(true))
repository = cloned;
}
};
form.add(EditHelper.renderForEdit(editContext, "editor"));
add(form);
} }
@Override @Override