Refactor resource management.

This commit is contained in:
robin shine 2013-09-23 09:25:08 +08:00
parent 6e70ce22d5
commit a34f8ca977
41 changed files with 273 additions and 138 deletions

View File

@ -0,0 +1,11 @@
package com.pmease.commons.wicket.asset;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
public class CommonHeaderItem {
public static JavaScriptHeaderItem get() {
return JavaScriptHeaderItem.forReference(CommonResourceReference.get());
}
}

View File

@ -0,0 +1,16 @@
package com.pmease.commons.wicket.asset;
import org.apache.wicket.Component;
import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.markup.head.IHeaderResponse;
@SuppressWarnings("serial")
public class CommonResourceBehavior extends Behavior {
@Override
public void renderHead(Component component, IHeaderResponse response) {
super.renderHead(component, response);
response.render(CommonHeaderItem.get());
}
}

View File

@ -1,28 +1,38 @@
package com.pmease.commons.wicket.asset;
import java.util.Arrays;
import org.apache.wicket.markup.head.CssHeaderItem;
import org.apache.wicket.markup.head.HeaderItem;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.request.resource.CssResourceReference;
import org.apache.wicket.request.resource.JavaScriptResourceReference;
import com.pmease.commons.wicket.asset.bootstrap.BootstrapResourceReference;
import com.pmease.commons.util.EasyList;
import com.pmease.commons.wicket.asset.bootstrap.BootstrapHeaderItem;
/**
* Common resource is intended to provide a common look&feel for all products using
* commons.wicket
*
* @author robin
*
*/
public class CommonResourceReference extends JavaScriptResourceReference {
private static final long serialVersionUID = 1L;
public CommonResourceReference() {
public static CommonResourceReference get() {
return INSTANCE;
}
private static CommonResourceReference INSTANCE = new CommonResourceReference();
private CommonResourceReference() {
super(CommonResourceReference.class, "common.js");
}
@SuppressWarnings("unchecked")
@Override
public Iterable<? extends HeaderItem> getDependencies() {
return Arrays.asList(
JavaScriptHeaderItem.forReference(new BootstrapResourceReference()),
return EasyList.of(
BootstrapHeaderItem.get(),
CssHeaderItem.forReference(new CssResourceReference(CommonResourceReference.class, "common.css")));
}

View File

@ -0,0 +1,22 @@
package com.pmease.commons.wicket.asset;
import org.apache.wicket.Application;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.request.resource.ResourceReference;
import org.apache.wicket.resource.JQueryResourceReference;
public class JQueryHeaderItem {
public static JavaScriptHeaderItem get() {
ResourceReference backingLibraryReference;
if (Application.exists()) {
backingLibraryReference = Application.get()
.getJavaScriptLibrarySettings()
.getJQueryReference();
} else {
backingLibraryReference = JQueryResourceReference.get();
}
return JavaScriptHeaderItem.forReference(backingLibraryReference);
}
}

View File

@ -0,0 +1,16 @@
package com.pmease.commons.wicket.asset;
import org.apache.wicket.Component;
import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.markup.head.IHeaderResponse;
@SuppressWarnings("serial")
public class JQueryResourceBehavior extends Behavior {
@Override
public void renderHead(Component component, IHeaderResponse response) {
super.renderHead(component, response);
response.render(JQueryHeaderItem.get());
}
}

View File

@ -0,0 +1,11 @@
package com.pmease.commons.wicket.asset.bootstrap;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
public class BootstrapHeaderItem {
public static JavaScriptHeaderItem get() {
return JavaScriptHeaderItem.forReference(BootstrapResourceReference.get());
}
}

View File

@ -0,0 +1,16 @@
package com.pmease.commons.wicket.asset.bootstrap;
import org.apache.wicket.Component;
import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.markup.head.IHeaderResponse;
@SuppressWarnings("serial")
public class BootstrapResourceBehavior extends Behavior {
@Override
public void renderHead(Component component, IHeaderResponse response) {
super.renderHead(component, response);
response.render(BootstrapHeaderItem.get());
}
}

View File

@ -1,30 +1,33 @@
package com.pmease.commons.wicket.asset.bootstrap;
import java.util.Arrays;
import org.apache.wicket.ajax.WicketEventJQueryResourceReference;
import org.apache.wicket.markup.head.CssHeaderItem;
import org.apache.wicket.markup.head.HeaderItem;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.request.resource.CssResourceReference;
import org.apache.wicket.request.resource.JavaScriptResourceReference;
import com.pmease.commons.util.EasyList;
import com.pmease.commons.wicket.asset.JQueryHeaderItem;
public class BootstrapResourceReference extends JavaScriptResourceReference {
private static final long serialVersionUID = 1L;
public BootstrapResourceReference() {
public static BootstrapResourceReference get() {
return INSTANCE;
}
private static BootstrapResourceReference INSTANCE = new BootstrapResourceReference();
private BootstrapResourceReference() {
super(BootstrapResourceReference.class, "js/bootstrap.js");
}
@Override
public Iterable<? extends HeaderItem> getDependencies() {
HeaderItem jquery = JavaScriptHeaderItem.forReference(WicketEventJQueryResourceReference.get());
HeaderItem jquery = JQueryHeaderItem.get();
HeaderItem stylesheet = CssHeaderItem.forReference(
new CssResourceReference(BootstrapResourceReference.class, "css/bootstrap.css"));
HeaderItem themeStylesheet = CssHeaderItem.forReference(
new CssResourceReference(BootstrapResourceReference.class, "css/bootstrap-theme.css"));
return Arrays.asList(jquery, stylesheet, themeStylesheet);
return EasyList.of(jquery, stylesheet);
}
}

View File

@ -40,7 +40,7 @@ public class ConfirmBehavior extends Behavior {
@Override
public void renderHead(Component component, IHeaderResponse response) {
super.renderHead(component, response);
response.render(JavaScriptHeaderItem.forReference(new ModalResourceReference()));
response.render(JavaScriptHeaderItem.forReference(ModalResourceReference.get()));
response.render(JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(ConfirmBehavior.class, "confirm.js")));
}

View File

@ -79,7 +79,7 @@ public class DropdownBehavior extends AbstractDefaultAjaxBehavior {
@Override
public void renderHead(Component component, IHeaderResponse response) {
super.renderHead(component, response);
response.render(JavaScriptHeaderItem.forReference(new DropdownResourceReference()));
response.render(JavaScriptHeaderItem.forReference(DropdownResourceReference.get()));
String script = String.format(
"setupDropdown('%s', '%s', %s, '%s', '%s', %s, %s, %s, %s, %d, %s)",
getComponent().getMarkupId(), dropdownPanel.getMarkupId(), hoverDelay, alignment.getIndicatorMode().name(),

View File

@ -8,21 +8,26 @@ import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.request.resource.CssResourceReference;
import org.apache.wicket.request.resource.JavaScriptResourceReference;
import com.pmease.commons.wicket.asset.bootstrap.BootstrapResourceReference;
import com.pmease.commons.wicket.asset.bootstrap.BootstrapHeaderItem;
public class DropdownResourceReference extends JavaScriptResourceReference {
private static final long serialVersionUID = 1L;
public DropdownResourceReference() {
public static DropdownResourceReference get() {
return INSTANCE;
}
private static DropdownResourceReference INSTANCE = new DropdownResourceReference();
private DropdownResourceReference() {
super(DropdownResourceReference.class, "dropdown.js");
}
@SuppressWarnings("unchecked")
@Override
public Iterable<? extends HeaderItem> getDependencies() {
return Arrays.asList(
JavaScriptHeaderItem.forReference(new BootstrapResourceReference()),
BootstrapHeaderItem.get(),
JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(
DropdownResourceReference.class, "alignment.js")),
CssHeaderItem.forReference(new CssResourceReference(

View File

@ -34,7 +34,7 @@ public class ModalBehavior extends AbstractDefaultAjaxBehavior {
@Override
public void renderHead(Component component, IHeaderResponse response) {
super.renderHead(component, response);
response.render(JavaScriptHeaderItem.forReference(new ModalResourceReference()));
response.render(JavaScriptHeaderItem.forReference(ModalResourceReference.get()));
String script = String.format(
"setupModal('%s', '%s', '%s', %s)",
getComponent().getMarkupId(), modalPanel.getMarkupId(),

View File

@ -4,25 +4,29 @@ import java.util.Arrays;
import org.apache.wicket.markup.head.CssHeaderItem;
import org.apache.wicket.markup.head.HeaderItem;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.request.resource.CssResourceReference;
import org.apache.wicket.request.resource.JavaScriptResourceReference;
import com.pmease.commons.wicket.asset.bootstrap.BootstrapResourceReference;
import com.pmease.commons.wicket.asset.bootstrap.BootstrapHeaderItem;
public class ModalResourceReference extends JavaScriptResourceReference {
private static final long serialVersionUID = 1L;
public ModalResourceReference() {
public static ModalResourceReference get() {
return INSTANCE;
}
private static ModalResourceReference INSTANCE = new ModalResourceReference();
private ModalResourceReference() {
super(ModalBehavior.class, "modal.js");
}
@SuppressWarnings("unchecked")
@Override
public Iterable<? extends HeaderItem> getDependencies() {
return Arrays.asList(
JavaScriptHeaderItem.forReference(new BootstrapResourceReference()),
BootstrapHeaderItem.get(),
CssHeaderItem.forReference(new CssResourceReference(ModalBehavior.class, "modal.css")));
}

View File

@ -53,7 +53,7 @@ public class TooltipBehavior extends Behavior {
@Override
public void renderHead(Component component, IHeaderResponse response) {
super.renderHead(component, response);
response.render(JavaScriptHeaderItem.forReference(new DropdownResourceReference()));
response.render(JavaScriptHeaderItem.forReference(DropdownResourceReference.get()));
String escapedContent = StringEscapeUtils.escapeEcmaScript(StringEscapeUtils.escapeHtml4(contentModel.getObject()));
String script = String.format(

View File

@ -11,12 +11,11 @@ import org.apache.wicket.ajax.attributes.IAjaxCallListener;
import org.apache.wicket.ajax.json.JSONArray;
import org.apache.wicket.ajax.json.JsonFunction;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
import org.apache.wicket.request.cycle.RequestCycle;
import org.apache.wicket.request.handler.TextRequestHandler;
import com.pmease.commons.wicket.asset.bootstrap.BootstrapResourceReference;
import com.pmease.commons.wicket.asset.bootstrap.BootstrapHeaderItem;
@SuppressWarnings("serial")
public abstract class TypeAheadBehavior extends AbstractDefaultAjaxBehavior {
@ -47,7 +46,7 @@ public abstract class TypeAheadBehavior extends AbstractDefaultAjaxBehavior {
public void renderHead(Component component, IHeaderResponse response) {
super.renderHead(component, response);
response.render(JavaScriptHeaderItem.forReference(new BootstrapResourceReference()));
response.render(BootstrapHeaderItem.get());
String template =
"$('#%s').typeahead({\n" +

View File

@ -7,12 +7,11 @@ import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.ISortableDataProvider;
import org.apache.wicket.extensions.markup.html.repeater.data.table.NoRecordsToolbar;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.markup.repeater.OddEvenItem;
import org.apache.wicket.model.IModel;
import com.pmease.commons.wicket.asset.bootstrap.BootstrapResourceReference;
import com.pmease.commons.wicket.asset.bootstrap.BootstrapHeaderItem;
@SuppressWarnings("serial")
public class CustomDataTable<T, S> extends DataTable<T, S> {
@ -35,7 +34,7 @@ public class CustomDataTable<T, S> extends DataTable<T, S> {
public void renderHead(IHeaderResponse response) {
super.renderHead(response);
response.render(JavaScriptHeaderItem.forReference(new BootstrapResourceReference()));
response.render(BootstrapHeaderItem.get());
}
}

View File

@ -15,7 +15,6 @@ import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.head.CssHeaderItem;
import org.apache.wicket.markup.head.HeaderItem;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.SubmitLink;
@ -25,7 +24,7 @@ import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.request.resource.CssResourceReference;
import com.google.common.base.Preconditions;
import com.pmease.commons.wicket.asset.bootstrap.BootstrapResourceReference;
import com.pmease.commons.wicket.asset.bootstrap.BootstrapHeaderItem;
@SuppressWarnings("serial")
public abstract class Wizard extends Panel {
@ -150,7 +149,7 @@ public abstract class Wizard extends Panel {
@Override
public Iterable<? extends HeaderItem> getDependencies() {
return Arrays.asList(JavaScriptHeaderItem.forReference(new BootstrapResourceReference()));
return Arrays.asList(BootstrapHeaderItem.get());
}
}));

View File

@ -0,0 +1,11 @@
package com.pmease.commons.wicket.editable;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
public class EditableHeaderItem {
public static JavaScriptHeaderItem get() {
return JavaScriptHeaderItem.forReference(EditableResourceReference.get());
}
}

View File

@ -0,0 +1,16 @@
package com.pmease.commons.wicket.editable;
import org.apache.wicket.Component;
import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.markup.head.IHeaderResponse;
@SuppressWarnings("serial")
public class EditableResourceBehavior extends Behavior {
@Override
public void renderHead(Component component, IHeaderResponse response) {
super.renderHead(component, response);
response.render(EditableHeaderItem.get());
}
}

View File

@ -1,30 +1,32 @@
package com.pmease.commons.wicket.editable;
import java.util.Arrays;
import org.apache.wicket.markup.head.CssHeaderItem;
import org.apache.wicket.markup.head.HeaderItem;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.request.resource.CssResourceReference;
import org.apache.wicket.request.resource.JavaScriptResourceReference;
import com.pmease.commons.wicket.asset.bootstrap.BootstrapResourceReference;
import com.pmease.commons.util.EasyList;
import com.pmease.commons.wicket.asset.bootstrap.BootstrapHeaderItem;
public class EditableResourceReference extends JavaScriptResourceReference {
private static final long serialVersionUID = 1L;
public EditableResourceReference() {
public static EditableResourceReference get() {
return INSTANCE;
}
private static EditableResourceReference INSTANCE = new EditableResourceReference();
private EditableResourceReference() {
super(EditableResourceReference.class, "editable.js");
}
@SuppressWarnings("unchecked")
@Override
public Iterable<? extends HeaderItem> getDependencies() {
return Arrays.asList(
JavaScriptHeaderItem.forReference(new BootstrapResourceReference()),
CssHeaderItem.forReference(new CssResourceReference(
EditableResourceReference.class, "editable.css")));
return EasyList.of(
BootstrapHeaderItem.get(),
CssHeaderItem.forReference(new CssResourceReference(EditableResourceReference.class, "editable.css")));
}
}

View File

@ -11,6 +11,7 @@ import org.apache.wicket.model.IModel;
import com.pmease.commons.editable.EditContext;
import com.pmease.commons.editable.PropertyEditContext;
import com.pmease.commons.wicket.editable.EditableResourceBehavior;
@SuppressWarnings("serial")
public class BooleanPropertyEditContext extends PropertyEditContext {
@ -46,7 +47,7 @@ public class BooleanPropertyEditContext extends PropertyEditContext {
super.onComponentTag(tag);
}
};
}.add(new EditableResourceBehavior());
}
@Override

View File

@ -11,6 +11,7 @@ import org.apache.wicket.model.IModel;
import com.pmease.commons.editable.EditContext;
import com.pmease.commons.editable.PropertyEditContext;
import com.pmease.commons.util.EasyList;
import com.pmease.commons.wicket.editable.EditableResourceBehavior;
@SuppressWarnings("serial")
public class NullableBooleanPropertyEditContext extends PropertyEditContext {
@ -58,7 +59,7 @@ public class NullableBooleanPropertyEditContext extends PropertyEditContext {
};
dropDownChoice.setNullValid(true);
dropDownChoice.setNullValid(true).add(new EditableResourceBehavior());
return dropDownChoice;
}

View File

@ -22,6 +22,7 @@ import com.pmease.commons.editable.BeanEditContext;
import com.pmease.commons.editable.EditableUtils;
import com.pmease.commons.editable.ValidationError;
import com.pmease.commons.wicket.WicketUtils;
import com.pmease.commons.wicket.editable.EditableResourceBehavior;
@SuppressWarnings("serial")
public class PolymorphicListPropertyEditor extends Panel {
@ -38,6 +39,8 @@ public class PolymorphicListPropertyEditor extends Panel {
@Override
protected void onInitialize() {
super.onInitialize();
add(new EditableResourceBehavior());
if (editContext.isPropertyRequired()) {
add(new WebMarkupContainer("enable").setVisible(false));

View File

@ -7,6 +7,7 @@ import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.Panel;
import com.pmease.commons.editable.BeanEditContext;
import com.pmease.commons.wicket.editable.EditableResourceBehavior;
@SuppressWarnings("serial")
public class PolymorphicListPropertyViewer extends Panel {
@ -22,6 +23,8 @@ public class PolymorphicListPropertyViewer extends Panel {
protected void onInitialize() {
super.onInitialize();
add(new EditableResourceBehavior());
add(new ListView<BeanEditContext>("elements", editContext.getElementContexts()) {
@Override

View File

@ -26,6 +26,7 @@ import com.pmease.commons.editable.EditableUtils;
import com.pmease.commons.editable.PropertyEditContext;
import com.pmease.commons.editable.ValidationError;
import com.pmease.commons.wicket.WicketUtils;
import com.pmease.commons.wicket.editable.EditableResourceBehavior;
@SuppressWarnings("serial")
public class TableListPropertyEditor extends Panel {
@ -41,6 +42,8 @@ public class TableListPropertyEditor extends Panel {
protected void onInitialize() {
super.onInitialize();
add(new EditableResourceBehavior());
if (editContext.isPropertyRequired()) {
add(new WebMarkupContainer("enable").setVisible(false));
if (editContext.getPropertyValue() == null) {

View File

@ -15,6 +15,7 @@ import org.apache.wicket.model.LoadableDetachableModel;
import com.pmease.commons.editable.EditContext;
import com.pmease.commons.editable.EditableUtils;
import com.pmease.commons.editable.PropertyEditContext;
import com.pmease.commons.wicket.editable.EditableResourceBehavior;
@SuppressWarnings("serial")
public class TableListPropertyViewer extends Panel {
@ -30,6 +31,8 @@ public class TableListPropertyViewer extends Panel {
protected void onInitialize() {
super.onInitialize();
add(new EditableResourceBehavior());
add(new ListView<Method>("headers", new LoadableDetachableModel<List<Method>>() {
@Override

View File

@ -11,6 +11,7 @@ import org.apache.wicket.model.Model;
import com.pmease.commons.editable.EditContext;
import com.pmease.commons.editable.PropertyEditContext;
import com.pmease.commons.wicket.editable.EditableResourceBehavior;
@SuppressWarnings("serial")
public class NumericPropertyEditContext extends PropertyEditContext {
@ -43,16 +44,17 @@ public class NumericPropertyEditContext extends PropertyEditContext {
super.onComponentTag(tag);
}
};
}.add(new EditableResourceBehavior());
}
@Override
public Object renderForView(Object renderParam) {
Object propertyValue = getPropertyValue();
if (propertyValue != null)
if (propertyValue != null) {
return new Label((String) renderParam, propertyValue.toString());
else
} else {
return new Label((String) renderParam, "<i>Not Defined</i>").setEscapeModelStrings(false);
}
}
@Override

View File

@ -28,10 +28,11 @@ public class ConfirmativePasswordPropertyEditContext extends PropertyEditContext
@Override
public Object renderForView(Object renderParam) {
if (getPropertyValue() != null)
if (getPropertyValue() != null) {
return new Label((String) renderParam, "******");
else
} else {
return new Label((String) renderParam, "<i>Not Defined</i>").setEscapeModelStrings(false);
}
}
@Override

View File

@ -4,6 +4,8 @@ import org.apache.wicket.markup.html.form.PasswordTextField;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import com.pmease.commons.wicket.editable.EditableResourceBehavior;
@SuppressWarnings("serial")
public class ConfirmativePasswordPropertyEditor extends Panel {
@ -18,6 +20,8 @@ public class ConfirmativePasswordPropertyEditor extends Panel {
protected void onInitialize() {
super.onInitialize();
add(new EditableResourceBehavior());
add(new PasswordTextField("input", new IModel<String>() {
@Override

View File

@ -10,6 +10,7 @@ import org.apache.wicket.model.IModel;
import com.pmease.commons.editable.EditContext;
import com.pmease.commons.editable.PropertyEditContext;
import com.pmease.commons.wicket.editable.EditableResourceBehavior;
@SuppressWarnings("serial")
public class PasswordPropertyEditContext extends PropertyEditContext {
@ -50,15 +51,18 @@ public class PasswordPropertyEditContext extends PropertyEditContext {
};
editor.setRequired(false);
editor.setResetPassword(false);
editor.add(new EditableResourceBehavior());
return editor;
}
@Override
public Object renderForView(Object renderParam) {
if (getPropertyValue() != null)
if (getPropertyValue() != null) {
return new Label((String) renderParam, "******");
else
} else {
return new Label((String) renderParam, "<i>Not Defined</i>").setEscapeModelStrings(false);
}
}
@Override

View File

@ -14,6 +14,7 @@ import org.apache.wicket.model.IModel;
import com.pmease.commons.editable.EditContext;
import com.pmease.commons.editable.EditableUtils;
import com.pmease.commons.wicket.editable.EditableResourceBehavior;
@SuppressWarnings("serial")
public class PolymorphicPropertyEditor extends Panel {
@ -31,6 +32,8 @@ public class PolymorphicPropertyEditor extends Panel {
protected void onInitialize() {
super.onInitialize();
add(new EditableResourceBehavior());
List<String> implementationNames = new ArrayList<String>();
for (Class<?> each: editContext.getImplementations())
implementationNames.add(EditableUtils.getName(each));

View File

@ -6,8 +6,6 @@ import java.util.Map;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Component;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
@ -20,7 +18,7 @@ import com.pmease.commons.editable.EditableUtils;
import com.pmease.commons.editable.PropertyEditContext;
import com.pmease.commons.editable.ValidationError;
import com.pmease.commons.editable.annotation.TableLayout;
import com.pmease.commons.wicket.editable.EditableResourceReference;
import com.pmease.commons.wicket.editable.EditableResourceBehavior;
@SuppressWarnings("serial")
public class ReflectionBeanEditor extends Panel {
@ -37,6 +35,8 @@ public class ReflectionBeanEditor extends Panel {
protected void onInitialize() {
super.onInitialize();
add(new EditableResourceBehavior());
add(new ListView<ValidationError>("beanValidationErrors", new LoadableDetachableModel<List<ValidationError>>() {
@Override
@ -119,10 +119,4 @@ public class ReflectionBeanEditor extends Panel {
}
@Override
public void renderHead(IHeaderResponse response) {
super.renderHead(response);
response.render(JavaScriptHeaderItem.forReference(new EditableResourceReference()));
}
}

View File

@ -1,8 +1,6 @@
package com.pmease.commons.wicket.editable.reflection;
import org.apache.wicket.Component;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
@ -10,7 +8,7 @@ import org.apache.wicket.markup.html.panel.Panel;
import com.pmease.commons.editable.EditableUtils;
import com.pmease.commons.editable.PropertyEditContext;
import com.pmease.commons.wicket.editable.EditableResourceReference;
import com.pmease.commons.wicket.editable.EditableResourceBehavior;
@SuppressWarnings("serial")
public class ReflectionBeanViewer extends Panel {
@ -27,6 +25,8 @@ public class ReflectionBeanViewer extends Panel {
protected void onInitialize() {
super.onInitialize();
add(new EditableResourceBehavior());
add(new ListView<PropertyEditContext>("properties", editContext.getPropertyContexts()) {
@Override
@ -39,10 +39,4 @@ public class ReflectionBeanViewer extends Panel {
});
}
@Override
public void renderHead(IHeaderResponse response) {
super.renderHead(response);
response.render(JavaScriptHeaderItem.forReference(new EditableResourceReference()));
}
}

View File

@ -9,6 +9,7 @@ import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import com.pmease.commons.editable.EditContext;
import com.pmease.commons.wicket.editable.EditableResourceBehavior;
@SuppressWarnings("serial")
public class ReflectionPropertyEditor extends Panel {
@ -26,6 +27,8 @@ public class ReflectionPropertyEditor extends Panel {
protected void onInitialize() {
super.onInitialize();
add(new EditableResourceBehavior());
if (editContext.isPropertyRequired()) {
add(new WebMarkupContainer("enable").setVisible(false));
if (editContext.getPropertyValue() == null) {

View File

@ -10,6 +10,7 @@ import org.apache.wicket.model.IModel;
import com.pmease.commons.editable.EditContext;
import com.pmease.commons.editable.PropertyEditContext;
import com.pmease.commons.wicket.editable.EditableResourceBehavior;
@SuppressWarnings("serial")
public class StringPropertyEditContext extends PropertyEditContext {
@ -47,7 +48,7 @@ public class StringPropertyEditContext extends PropertyEditContext {
super.onComponentTag(tag);
}
};
}.add(new EditableResourceBehavior());
}
@Override

View File

@ -272,12 +272,13 @@ public class User extends AbstractUser implements ProtectedObject {
if (repositoryPermission.implies(objectPermission))
return true;
}
} else {
for (Repository each: Gitop.getInstance(RepositoryManager.class).findPublic()) {
ObjectPermission repositoryPermission = new ObjectPermission(each, RepositoryOperation.READ);
if (repositoryPermission.implies(objectPermission))
return true;
}
}
// check if is public access
for (Repository each: Gitop.getInstance(RepositoryManager.class).findPublic()) {
ObjectPermission repositoryPermission = new ObjectPermission(each, RepositoryOperation.READ);
if (repositoryPermission.implies(objectPermission))
return true;
}
}
return false;

View File

@ -1,14 +1,6 @@
package com.pmease.gitop.core.permission.operation;
public enum UserOperation implements PrivilegedOperation {
NO_ACCESS {
@Override
public boolean can(PrivilegedOperation operation) {
return false;
}
},
READ {
@Override

View File

@ -5,6 +5,7 @@
<meta wicket:id="refresh" http-equiv="refresh"/>
</head>
<body>
<wicket:container wicket:id="globalResourceBinder"></wicket:container>
<wicket:child></wicket:child>
</body>
</html>

View File

@ -2,7 +2,9 @@ package com.pmease.gitop.web;
import java.util.Arrays;
import org.apache.wicket.Component;
import org.apache.wicket.RestartResponseAtInterceptPageException;
import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.head.CssHeaderItem;
import org.apache.wicket.markup.head.HeaderItem;
@ -14,7 +16,7 @@ import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.request.resource.CssResourceReference;
import org.apache.wicket.request.resource.JavaScriptResourceReference;
import com.pmease.commons.wicket.asset.CommonResourceReference;
import com.pmease.commons.wicket.asset.CommonHeaderItem;
import com.pmease.gitop.core.Gitop;
import com.pmease.gitop.web.asset.AssetLocator;
@ -47,27 +49,38 @@ public abstract class BasePage extends WebPage {
}
});
}
protected abstract String getTitle();
@Override
public void renderHead(IHeaderResponse response) {
super.renderHead(response);
response.render(JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(AssetLocator.class, "page.js") {
/*
* Bind global resources here so that they can appear in page header before
* any other resources. Simply rendering the resource in renderHead method of
* base page will not work as renderHead method of container will be called
* after contained components, and this will cause components with resources
* using global resources not working properly.
*
*/
add(new WebMarkupContainer("globalResourceBinder").add(new Behavior() {
@SuppressWarnings("unchecked")
@Override
public Iterable<? extends HeaderItem> getDependencies() {
return Arrays.asList(
JavaScriptHeaderItem.forReference(new CommonResourceReference()),
CssHeaderItem.forReference(new CssResourceReference(AssetLocator.class, "page.css")));
public void renderHead(Component component, IHeaderResponse response) {
super.renderHead(component, response);
response.render(JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(AssetLocator.class, "page.js") {
@Override
public Iterable<? extends HeaderItem> getDependencies() {
return Arrays.asList(
CommonHeaderItem.get(),
CssHeaderItem.forReference(new CssResourceReference(AssetLocator.class, "page.css")));
}
}));
}
}));
}
protected abstract String getTitle();
protected int getPageRefreshInterval() {
return 0;
}

View File

@ -1,8 +1,3 @@
<wicket:extend>
<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>
<div wicket:id="test"></div>
</wicket:extend>

View File

@ -1,38 +1,11 @@
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")
public class HomePage extends BasePage {
private static Repository repository = new Repository();
@Override
protected void 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.hasValidationError(true))
repository = cloned;
}
};
form.add(EditHelper.renderForEdit(editContext, "editor"));
add(form);
}
@Override