From 8abe1dffc408e6c40ae235c02f523a8cd15aef7b Mon Sep 17 00:00:00 2001 From: Christian Meier Date: Tue, 12 Mar 2013 13:00:56 +0530 Subject: [PATCH] add common components --- .../de/mkristian/ixtlan/IxtlanGWT.gwt.xml | 7 + .../gwt/audits/AbstractAuditListViewImpl.java | 41 ++++++ .../de/mkristian/ixtlan/gwt/audits/Audit.java | 73 +++++++++++ .../ixtlan/gwt/audits/AuditEditor.java | 44 +++++++ .../ixtlan/gwt/audits/AuditEditor.ui.xml | 30 +++++ .../ixtlan/gwt/audits/AuditEvent.java | 32 +++++ .../ixtlan/gwt/audits/AuditEventHandler.java | 7 + .../gwt/audits/AuditRemoteReadOnly.java | 76 +++++++++++ .../ixtlan/gwt/audits/AuditsRestService.java | 25 ++++ .../mkristian/ixtlan/gwt/domains/Domain.java | 50 +++++++ .../ixtlan/gwt/domains/DomainEvent.java | 32 +++++ .../gwt/domains/DomainEventHandler.java | 7 + .../gwt/domains/DomainRemoteReadOnly.java | 76 +++++++++++ .../ixtlan/gwt/domains/DomainRestService.java | 25 ++++ .../de/mkristian/ixtlan/gwt/errors/Error.java | 123 ++++++++++++++++++ .../ixtlan/gwt/errors/ErrorEditor.java | 55 ++++++++ .../ixtlan/gwt/errors/ErrorEditor.ui.xml | 50 +++++++ .../ixtlan/gwt/errors/ErrorEvent.java | 32 +++++ .../ixtlan/gwt/errors/ErrorEventHandler.java | 7 + .../gwt/errors/ErrorRemoteReadOnly.java | 76 +++++++++++ .../ixtlan/gwt/errors/ErrorsRestService.java | 23 ++++ .../mkristian/ixtlan/gwt/locales/Locale.java | 50 +++++++ .../ixtlan/gwt/locales/LocaleEvent.java | 32 +++++ .../gwt/locales/LocaleEventHandler.java | 7 + .../gwt/locales/LocaleRemoteReadOnly.java | 76 +++++++++++ .../gwt/locales/LocalesRestService.java | 23 ++++ 26 files changed, 1079 insertions(+) create mode 100644 rails-gwt/src/main/java/de/mkristian/ixtlan/IxtlanGWT.gwt.xml create mode 100644 rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/audits/AbstractAuditListViewImpl.java create mode 100644 rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/audits/Audit.java create mode 100644 rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/audits/AuditEditor.java create mode 100644 rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/audits/AuditEditor.ui.xml create mode 100644 rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/audits/AuditEvent.java create mode 100644 rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/audits/AuditEventHandler.java create mode 100644 rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/audits/AuditRemoteReadOnly.java create mode 100644 rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/audits/AuditsRestService.java create mode 100644 rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/domains/Domain.java create mode 100644 rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/domains/DomainEvent.java create mode 100644 rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/domains/DomainEventHandler.java create mode 100644 rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/domains/DomainRemoteReadOnly.java create mode 100644 rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/domains/DomainRestService.java create mode 100644 rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/errors/Error.java create mode 100644 rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/errors/ErrorEditor.java create mode 100644 rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/errors/ErrorEditor.ui.xml create mode 100644 rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/errors/ErrorEvent.java create mode 100644 rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/errors/ErrorEventHandler.java create mode 100644 rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/errors/ErrorRemoteReadOnly.java create mode 100644 rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/errors/ErrorsRestService.java create mode 100644 rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/locales/Locale.java create mode 100644 rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/locales/LocaleEvent.java create mode 100644 rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/locales/LocaleEventHandler.java create mode 100644 rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/locales/LocaleRemoteReadOnly.java create mode 100644 rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/locales/LocalesRestService.java diff --git a/rails-gwt/src/main/java/de/mkristian/ixtlan/IxtlanGWT.gwt.xml b/rails-gwt/src/main/java/de/mkristian/ixtlan/IxtlanGWT.gwt.xml new file mode 100644 index 0000000..24da83e --- /dev/null +++ b/rails-gwt/src/main/java/de/mkristian/ixtlan/IxtlanGWT.gwt.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/audits/AbstractAuditListViewImpl.java b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/audits/AbstractAuditListViewImpl.java new file mode 100644 index 0000000..279a31a --- /dev/null +++ b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/audits/AbstractAuditListViewImpl.java @@ -0,0 +1,41 @@ +package de.mkristian.ixtlan.gwt.audits; + +import static de.mkristian.gwt.rails.places.RestfulActionEnum.SHOW; + +import java.util.List; + +import com.google.gwt.place.shared.PlaceController; + +import de.mkristian.gwt.rails.views.ReadOnlyListViewImpl; + +public abstract class AbstractAuditListViewImpl + extends ReadOnlyListViewImpl { + + public AbstractAuditListViewImpl(String title, PlaceController places) { + super(title, places); + } + + public void reset(List models) { + list.removeAllRows(); + list.setText(0, 0, "Id"); + list.setText(0, 1, "Login"); + list.setText(0, 2, "Message"); + list.getRowFormatter().addStyleName(0, "gwt-rails-model-list-header"); + if (models != null) { + int row = 1; + for(Audit model: models){ + setRow(row, model); + row++; + } + } + } + + private void setRow(int row, Audit model) { + list.setText(row, 0, model.getId() + ""); + list.setText(row, 1, model.getLogin() + ""); + list.setText(row, 2, model.getMessage() + ""); + + list.setWidget(row, 3, newButton(SHOW, model)); + } + +} \ No newline at end of file diff --git a/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/audits/Audit.java b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/audits/Audit.java new file mode 100644 index 0000000..3bf6fdc --- /dev/null +++ b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/audits/Audit.java @@ -0,0 +1,73 @@ +package de.mkristian.ixtlan.gwt.audits; + + +import java.util.Date; + +import org.codehaus.jackson.annotate.JsonCreator; +import org.codehaus.jackson.annotate.JsonProperty; +import org.fusesource.restygwt.client.Json; +import org.fusesource.restygwt.client.Json.Style; + +import de.mkristian.gwt.rails.models.HasToDisplay; +import de.mkristian.gwt.rails.models.Identifiable; + +@Json(style = Style.RAILS) +public class Audit implements HasToDisplay, Identifiable { + + public final int id; + + @Json(name = "created_at") + private final Date createdAt; + + private String login; + + private String message; + + public Audit(){ + this(0, null); + } + + @JsonCreator + public Audit(@JsonProperty("id") int id, + @JsonProperty("createdAt") Date createdAt){ + this.id = id; + this.createdAt = createdAt; + } + + public int getId(){ + return id; + } + + public Date getCreatedAt(){ + return createdAt; + } + + public String getLogin(){ + return login; + } + + public void setLogin(String value){ + login = value; + } + + public String getMessage(){ + return message; + } + + public void setMessage(String value){ + message = value; + } + + public int hashCode(){ + return id; + } + + public boolean equals(Object other){ + return (other instanceof Audit) && + ((Audit)other).id == id; + } + + public String toDisplay() { + return login; + } +} diff --git a/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/audits/AuditEditor.java b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/audits/AuditEditor.java new file mode 100644 index 0000000..e985e08 --- /dev/null +++ b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/audits/AuditEditor.java @@ -0,0 +1,44 @@ +package de.mkristian.ixtlan.gwt.audits; + + +import com.google.gwt.core.client.GWT; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.ui.DateLabel; +import com.google.gwt.user.client.ui.FlowPanel; +import com.google.gwt.user.client.ui.NumberLabel; +import com.google.gwt.user.client.ui.TextBox; +import com.google.gwt.user.client.ui.Widget; + +import de.mkristian.gwt.rails.editors.EnabledEditor; + + +public class AuditEditor extends EnabledEditor{ + + interface Binder extends UiBinder {} + + private static final Binder BINDER = GWT.create(Binder.class); + + @Ignore @UiField FlowPanel signature; + + @UiField NumberLabel id; + @UiField DateLabel createdAt; + + @UiField TextBox login; + + @UiField TextBox message; + + public AuditEditor() { + initWidget(BINDER.createAndBindUi(this)); + } + + public void resetVisibility() { + this.signature.setVisible(id.getValue() != null && id.getValue() > 0); + } + + public void setEnabled(boolean enabled) { + resetVisibility(); + this.login.setEnabled(enabled); + this.message.setEnabled(enabled); + } +} \ No newline at end of file diff --git a/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/audits/AuditEditor.ui.xml b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/audits/AuditEditor.ui.xml new file mode 100644 index 0000000..fc00bdd --- /dev/null +++ b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/audits/AuditEditor.ui.xml @@ -0,0 +1,30 @@ + + + + + + + id: + + created at: + + + + + + + + + + + + + + + + + diff --git a/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/audits/AuditEvent.java b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/audits/AuditEvent.java new file mode 100644 index 0000000..8f26457 --- /dev/null +++ b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/audits/AuditEvent.java @@ -0,0 +1,32 @@ +package de.mkristian.ixtlan.gwt.audits; + +import java.util.List; + +import org.fusesource.restygwt.client.Method; + +import de.mkristian.gwt.rails.events.ModelEvent; +import de.mkristian.gwt.rails.events.ModelEventHandler; + +public class AuditEvent extends ModelEvent { + + public static final Type> TYPE = new Type>(); + + public AuditEvent( Method method, Audit model, + ModelEvent.Action action) { + super( method, model, action ); + } + + public AuditEvent( Method method, List models, + ModelEvent.Action action) { + super( method, models, action ); + } + + public AuditEvent( Method method, Throwable e ) { + super( method, e ); + } + + @Override + public Type> getAssociatedType() { + return TYPE; + } +} \ No newline at end of file diff --git a/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/audits/AuditEventHandler.java b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/audits/AuditEventHandler.java new file mode 100644 index 0000000..d0fa012 --- /dev/null +++ b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/audits/AuditEventHandler.java @@ -0,0 +1,7 @@ +package de.mkristian.ixtlan.gwt.audits; + + +import de.mkristian.gwt.rails.events.ModelEventHandler; + +public interface AuditEventHandler extends ModelEventHandler { +} \ No newline at end of file diff --git a/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/audits/AuditRemoteReadOnly.java b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/audits/AuditRemoteReadOnly.java new file mode 100644 index 0000000..e32bab7 --- /dev/null +++ b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/audits/AuditRemoteReadOnly.java @@ -0,0 +1,76 @@ +/* + * ixtlan_gettext - helper to use fast_gettext with datamapper/ixtlan + * Copyright (C) 2012 Christian Meier + * + * This file is part of ixtlan_gettext. + * + * ixtlan_gettext is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * ixtlan_gettext is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with ixtlan_gettext. If not, see . + */ + +package de.mkristian.ixtlan.gwt.audits; + +import java.util.List; + +import javax.inject.Inject; +import javax.inject.Singleton; + +import org.fusesource.restygwt.client.Method; + +import com.google.gwt.event.shared.EventBus; + +import de.mkristian.gwt.rails.RemoteNotifier; +import de.mkristian.gwt.rails.caches.RemoteReadOnlyAdapter; +import de.mkristian.gwt.rails.events.ModelEvent; +import de.mkristian.gwt.rails.events.ModelEvent.Action; + +@Singleton +public class AuditRemoteReadOnly extends RemoteReadOnlyAdapter { + + private final AuditsRestService restService; + + @Inject + protected AuditRemoteReadOnly( RemoteNotifier notifier, + EventBus eventBus, + AuditsRestService restService ) { + super( eventBus, notifier ); + this.restService = restService; + } + + @Override + protected ModelEvent newEvent(Method method, List models, Action action) { + return new AuditEvent( method, models, action ); + } + + @Override + protected ModelEvent newEvent(Method method, Audit model, Action action) { + return new AuditEvent( method, model, action ); + } + + @Override + protected ModelEvent newEvent(Method method, Throwable e) { + return new AuditEvent( method, e ); + } + + @Override + public void retrieveAll() { + notifier.loading(); + restService.index(newRetrieveAllCallback()); + } + + @Override + public void retrieve(int id) { + notifier.loading(); + restService.show(id, newRetrieveCallback()); + } +} \ No newline at end of file diff --git a/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/audits/AuditsRestService.java b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/audits/AuditsRestService.java new file mode 100644 index 0000000..d23e86e --- /dev/null +++ b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/audits/AuditsRestService.java @@ -0,0 +1,25 @@ +package de.mkristian.ixtlan.gwt.audits; + +import java.util.List; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; + +import org.fusesource.restygwt.client.MethodCallback; +import org.fusesource.restygwt.client.Options; +import org.fusesource.restygwt.client.RestService; + +import de.mkristian.gwt.rails.dispatchers.DefaultDispatcherSingleton; + + +@Options(dispatcher = DefaultDispatcherSingleton.class) +public interface AuditsRestService extends RestService { + + @GET @Path("/audits") + void index(MethodCallback> callback); + + @GET @Path("/audits/{id}") + void show(@PathParam("id") int id, MethodCallback callback); + +} diff --git a/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/domains/Domain.java b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/domains/Domain.java new file mode 100644 index 0000000..b8305c5 --- /dev/null +++ b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/domains/Domain.java @@ -0,0 +1,50 @@ +package de.mkristian.ixtlan.gwt.domains; + + +import org.codehaus.jackson.annotate.JsonCreator; +import org.codehaus.jackson.annotate.JsonProperty; +import org.fusesource.restygwt.client.Json; +import org.fusesource.restygwt.client.Json.Style; + +import de.mkristian.gwt.rails.models.HasToDisplay; +import de.mkristian.gwt.rails.models.Identifiable; + +@Json(style = Style.RAILS) +public class Domain implements HasToDisplay, Identifiable { + + private final int id; + + private final String name; + + public Domain(){ + this(0, null); + } + + @JsonCreator + public Domain(@JsonProperty("id") int id, + @JsonProperty("name") String name){ + this.id = id; + this.name = name; + } + + public int getId(){ + return id; + } + + public String getName(){ + return name; + } + + public int hashCode(){ + return id; + } + + public boolean equals(Object other){ + return (other instanceof Domain) && + ((Domain)other).id == id; + } + + public String toDisplay() { + return name; + } +} diff --git a/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/domains/DomainEvent.java b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/domains/DomainEvent.java new file mode 100644 index 0000000..da398ff --- /dev/null +++ b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/domains/DomainEvent.java @@ -0,0 +1,32 @@ +package de.mkristian.ixtlan.gwt.domains; + +import java.util.List; + +import org.fusesource.restygwt.client.Method; + +import de.mkristian.gwt.rails.events.ModelEvent; +import de.mkristian.gwt.rails.events.ModelEventHandler; + +public class DomainEvent extends ModelEvent { + + public static final Type> TYPE = new Type>(); + + public DomainEvent( Method method, Domain model, + ModelEvent.Action action ) { + super( method, model, action ); + } + + public DomainEvent( Method method, List models, + ModelEvent.Action action ) { + super( method, models, action ); + } + + public DomainEvent( Method method, Throwable e) { + super( method, e ); + } + + @Override + public Type> getAssociatedType() { + return TYPE; + } +} \ No newline at end of file diff --git a/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/domains/DomainEventHandler.java b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/domains/DomainEventHandler.java new file mode 100644 index 0000000..3affdf6 --- /dev/null +++ b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/domains/DomainEventHandler.java @@ -0,0 +1,7 @@ +package de.mkristian.ixtlan.gwt.domains; + + +import de.mkristian.gwt.rails.events.ModelEventHandler; + +public interface DomainEventHandler extends ModelEventHandler { +} \ No newline at end of file diff --git a/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/domains/DomainRemoteReadOnly.java b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/domains/DomainRemoteReadOnly.java new file mode 100644 index 0000000..ef96e78 --- /dev/null +++ b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/domains/DomainRemoteReadOnly.java @@ -0,0 +1,76 @@ +/* + * ixtlan_gettext - helper to use fast_gettext with datamapper/ixtlan + * Copyright (C) 2012 Christian Meier + * + * This file is part of ixtlan_gettext. + * + * ixtlan_gettext is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * ixtlan_gettext is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with ixtlan_gettext. If not, see . + */ + +package de.mkristian.ixtlan.gwt.domains; + +import java.util.List; + +import javax.inject.Inject; +import javax.inject.Singleton; + +import org.fusesource.restygwt.client.Method; + +import com.google.gwt.event.shared.EventBus; + +import de.mkristian.gwt.rails.RemoteNotifier; +import de.mkristian.gwt.rails.caches.RemoteReadOnlyAdapter; +import de.mkristian.gwt.rails.events.ModelEvent; +import de.mkristian.gwt.rails.events.ModelEvent.Action; + +@Singleton +public class DomainRemoteReadOnly extends RemoteReadOnlyAdapter { + + private final DomainRestService restService; + + @Inject + protected DomainRemoteReadOnly( RemoteNotifier notifier, + EventBus eventBus, + DomainRestService restService ) { + super( eventBus, notifier ); + this.restService = restService; + } + + @Override + protected ModelEvent newEvent(Method method, List models, Action action) { + return new DomainEvent( method, models, action ); + } + + @Override + protected ModelEvent newEvent(Method method, Domain model, Action action) { + return new DomainEvent( method, model, action ); + } + + @Override + protected DomainEvent newEvent(Method method, Throwable e) { + return new DomainEvent( method, e ); + } + + @Override + public void retrieveAll() { + notifier.loading(); + restService.index(newRetrieveAllCallback()); + } + + @Override + public void retrieve(int id) { + notifier.loading(); + restService.show(id, newRetrieveCallback()); + } +} \ No newline at end of file diff --git a/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/domains/DomainRestService.java b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/domains/DomainRestService.java new file mode 100644 index 0000000..52e768b --- /dev/null +++ b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/domains/DomainRestService.java @@ -0,0 +1,25 @@ +package de.mkristian.ixtlan.gwt.domains; + +import java.util.List; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; + +import org.fusesource.restygwt.client.MethodCallback; +import org.fusesource.restygwt.client.Options; +import org.fusesource.restygwt.client.RestService; + +import de.mkristian.gwt.rails.dispatchers.DefaultDispatcherSingleton; + + +@Options(dispatcher = DefaultDispatcherSingleton.class) +public interface DomainRestService extends RestService { + + @GET @Path("/domains") + void index(MethodCallback> callback); + + @GET @Path("/domains/{id}") + void show(@PathParam("id") int id, MethodCallback callback); + +} diff --git a/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/errors/Error.java b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/errors/Error.java new file mode 100644 index 0000000..8fdf8c3 --- /dev/null +++ b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/errors/Error.java @@ -0,0 +1,123 @@ +package de.mkristian.ixtlan.gwt.errors; + + +import java.util.Date; + +import org.codehaus.jackson.annotate.JsonCreator; +import org.codehaus.jackson.annotate.JsonProperty; +import org.fusesource.restygwt.client.Json; +import org.fusesource.restygwt.client.Json.Style; + +import de.mkristian.gwt.rails.models.HasToDisplay; +import de.mkristian.gwt.rails.models.Identifiable; + +@Json(style = Style.RAILS) +public class Error implements HasToDisplay, Identifiable { + + public final int id; + + @Json(name = "created_at") + private final Date createdAt; + + private String message; + + private String request; + + private String response; + + private String session; + + private String parameters; + + private String clazz; + + private String backtrace; + + public Error(){ + this(0, null); + } + + @JsonCreator + public Error(@JsonProperty("id") int id, + @JsonProperty("createdAt") Date createdAt){ + this.id = id; + this.createdAt = createdAt; + } + + public int getId(){ + return id; + } + + public Date getCreatedAt(){ + return createdAt; + } + + public String getMessage(){ + return message; + } + + public void setMessage(String value){ + message = value; + } + + public String getRequest(){ + return request; + } + + public void setRequest(String value){ + request = value; + } + + public String getResponse(){ + return response; + } + + public void setResponse(String value){ + response = value; + } + + public String getSession(){ + return session; + } + + public void setSession(String value){ + session = value; + } + + public String getParameters(){ + return parameters; + } + + public void setParameters(String value){ + parameters = value; + } + + public String getClazz(){ + return clazz; + } + + public void setClazz(String value){ + clazz = value; + } + + public String getBacktrace(){ + return backtrace; + } + + public void setBacktrace(String value){ + backtrace = value; + } + + public int hashCode(){ + return id; + } + + public boolean equals(Object other){ + return (other instanceof Error) && + ((Error)other).id == id; + } + + public String toDisplay() { + return message; + } +} diff --git a/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/errors/ErrorEditor.java b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/errors/ErrorEditor.java new file mode 100644 index 0000000..9442593 --- /dev/null +++ b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/errors/ErrorEditor.java @@ -0,0 +1,55 @@ +package de.mkristian.ixtlan.gwt.errors; + + +import com.google.gwt.core.client.GWT; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.ui.DateLabel; +import com.google.gwt.user.client.ui.FlowPanel; +import com.google.gwt.user.client.ui.Label; +import com.google.gwt.user.client.ui.NumberLabel; +import com.google.gwt.user.client.ui.TextBox; +import com.google.gwt.user.client.ui.Widget; + +import de.mkristian.gwt.rails.editors.EnabledEditor; + + +public class ErrorEditor extends EnabledEditor{ + + interface Binder extends UiBinder {} + + private static final Binder BINDER = GWT.create(Binder.class); + + @Ignore @UiField FlowPanel signature; + + @UiField NumberLabel id; + @UiField DateLabel createdAt; + + @UiField TextBox message; + + @UiField Label request; + + @UiField Label response; + + @UiField Label session; + + @UiField Label parameters; + + @UiField TextBox clazz; + + @UiField Label backtrace; + + public ErrorEditor() { + initWidget(BINDER.createAndBindUi(this)); + } + + public void resetVisibility() { + this.signature.setVisible(id.getValue() != null && id.getValue() > 0); + } + + public void setEnabled(boolean enabled) { + resetVisibility(); + this.message.setEnabled(enabled); + this.clazz.setEnabled(enabled); + } +} \ No newline at end of file diff --git a/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/errors/ErrorEditor.ui.xml b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/errors/ErrorEditor.ui.xml new file mode 100644 index 0000000..3b32683 --- /dev/null +++ b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/errors/ErrorEditor.ui.xml @@ -0,0 +1,50 @@ + + + + + + + id: + + created at: + + + + + + + + + + +
+
+ + +
+
+ + +
+
+ + +
+
+ + + + + + +
+
+
+ +
+ +
diff --git a/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/errors/ErrorEvent.java b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/errors/ErrorEvent.java new file mode 100644 index 0000000..b6b721a --- /dev/null +++ b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/errors/ErrorEvent.java @@ -0,0 +1,32 @@ +package de.mkristian.ixtlan.gwt.errors; + +import java.util.List; + +import org.fusesource.restygwt.client.Method; + +import de.mkristian.gwt.rails.events.ModelEvent; +import de.mkristian.gwt.rails.events.ModelEventHandler; + +public class ErrorEvent extends ModelEvent { + + public static final Type> TYPE = new Type>(); + + public ErrorEvent( Method method, Error model, + ModelEvent.Action action ) { + super( method, model, action ); + } + + public ErrorEvent( Method method, List models, + ModelEvent.Action action ) { + super( method, models, action ); + } + + public ErrorEvent( Method method, Throwable e) { + super( method, e ); + } + + @Override + public Type> getAssociatedType() { + return TYPE; + } +} \ No newline at end of file diff --git a/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/errors/ErrorEventHandler.java b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/errors/ErrorEventHandler.java new file mode 100644 index 0000000..b85de0e --- /dev/null +++ b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/errors/ErrorEventHandler.java @@ -0,0 +1,7 @@ +package de.mkristian.ixtlan.gwt.errors; + + +import de.mkristian.gwt.rails.events.ModelEventHandler; + +public interface ErrorEventHandler extends ModelEventHandler { +} \ No newline at end of file diff --git a/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/errors/ErrorRemoteReadOnly.java b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/errors/ErrorRemoteReadOnly.java new file mode 100644 index 0000000..69c8381 --- /dev/null +++ b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/errors/ErrorRemoteReadOnly.java @@ -0,0 +1,76 @@ +/* + * ixtlan_gettext - helper to use fast_gettext with datamapper/ixtlan + * Copyright (C) 2012 Christian Meier + * + * This file is part of ixtlan_gettext. + * + * ixtlan_gettext is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * ixtlan_gettext is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with ixtlan_gettext. If not, see . + */ + +package de.mkristian.ixtlan.gwt.errors; + +import java.util.List; + +import javax.inject.Inject; +import javax.inject.Singleton; + +import org.fusesource.restygwt.client.Method; + +import com.google.gwt.event.shared.EventBus; + +import de.mkristian.gwt.rails.RemoteNotifier; +import de.mkristian.gwt.rails.caches.RemoteReadOnlyAdapter; +import de.mkristian.gwt.rails.events.ModelEvent; +import de.mkristian.gwt.rails.events.ModelEvent.Action; + +@Singleton +public class ErrorRemoteReadOnly extends RemoteReadOnlyAdapter { + + private final ErrorsRestService restService; + + @Inject + protected ErrorRemoteReadOnly( RemoteNotifier notifier, + EventBus eventBus, + ErrorsRestService restService ) { + super( eventBus, notifier ); + this.restService = restService; + } + + @Override + protected ModelEvent newEvent(Method method, List models, Action action) { + return new ErrorEvent( method, models, action ); + } + + @Override + protected ModelEvent newEvent(Method method, Error model, Action action) { + return new ErrorEvent( method, model, action ); + } + + @Override + protected ErrorEvent newEvent(Method method, Throwable e) { + return new ErrorEvent( method, e ); + } + + @Override + public void retrieveAll() { + notifier.loading(); + restService.index(newRetrieveAllCallback()); + } + + @Override + public void retrieve(int id) { + notifier.loading(); + restService.show(id, newRetrieveCallback()); + } +} \ No newline at end of file diff --git a/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/errors/ErrorsRestService.java b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/errors/ErrorsRestService.java new file mode 100644 index 0000000..b67c661 --- /dev/null +++ b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/errors/ErrorsRestService.java @@ -0,0 +1,23 @@ +package de.mkristian.ixtlan.gwt.errors; + +import de.mkristian.gwt.rails.dispatchers.DefaultDispatcherSingleton; + +import java.util.List; + +import javax.ws.rs.*; + +import org.fusesource.restygwt.client.MethodCallback; +import org.fusesource.restygwt.client.Options; +import org.fusesource.restygwt.client.RestService; + + +@Options(dispatcher = DefaultDispatcherSingleton.class) +public interface ErrorsRestService extends RestService { + + @GET @Path("/errors") + void index(MethodCallback> callback); + + @GET @Path("/errors/{id}") + void show(@PathParam("id") int id, MethodCallback callback); + +} diff --git a/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/locales/Locale.java b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/locales/Locale.java new file mode 100644 index 0000000..06b2a9f --- /dev/null +++ b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/locales/Locale.java @@ -0,0 +1,50 @@ +package de.mkristian.ixtlan.gwt.locales; + + +import org.codehaus.jackson.annotate.JsonCreator; +import org.codehaus.jackson.annotate.JsonProperty; +import org.fusesource.restygwt.client.Json; +import org.fusesource.restygwt.client.Json.Style; + +import de.mkristian.gwt.rails.models.HasToDisplay; +import de.mkristian.gwt.rails.models.Identifiable; + +@Json(style = Style.RAILS) +public class Locale implements HasToDisplay, Identifiable { + + private final int id; + + private final String code; + + public Locale(){ + this(0, null); + } + + @JsonCreator + public Locale(@JsonProperty("id") int id, + @JsonProperty("code") String code){ + this.id = id; + this.code = code; + } + + public int getId(){ + return id; + } + + public String getCode(){ + return code; + } + + public int hashCode(){ + return id; + } + + public boolean equals(Object other){ + return (other instanceof Locale) && + ((Locale)other).id == id; + } + + public String toDisplay() { + return code; + } +} diff --git a/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/locales/LocaleEvent.java b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/locales/LocaleEvent.java new file mode 100644 index 0000000..ffd57dd --- /dev/null +++ b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/locales/LocaleEvent.java @@ -0,0 +1,32 @@ +package de.mkristian.ixtlan.gwt.locales; + +import java.util.List; + +import org.fusesource.restygwt.client.Method; + +import de.mkristian.gwt.rails.events.ModelEvent; +import de.mkristian.gwt.rails.events.ModelEventHandler; + +public class LocaleEvent extends ModelEvent { + + public static final Type> TYPE = new Type>(); + + public LocaleEvent( Method method, Locale model, + ModelEvent.Action action ) { + super( method, model, action ); + } + + public LocaleEvent( Method method, List models, + ModelEvent.Action action ) { + super( method, models, action ); + } + + public LocaleEvent( Method method, Throwable e) { + super( method, e ); + } + + @Override + public Type> getAssociatedType() { + return TYPE; + } +} \ No newline at end of file diff --git a/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/locales/LocaleEventHandler.java b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/locales/LocaleEventHandler.java new file mode 100644 index 0000000..9dab11c --- /dev/null +++ b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/locales/LocaleEventHandler.java @@ -0,0 +1,7 @@ +package de.mkristian.ixtlan.gwt.locales; + + +import de.mkristian.gwt.rails.events.ModelEventHandler; + +public interface LocaleEventHandler extends ModelEventHandler { +} \ No newline at end of file diff --git a/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/locales/LocaleRemoteReadOnly.java b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/locales/LocaleRemoteReadOnly.java new file mode 100644 index 0000000..703e1fd --- /dev/null +++ b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/locales/LocaleRemoteReadOnly.java @@ -0,0 +1,76 @@ +/* + * ixtlan_gettext - helper to use fast_gettext with datamapper/ixtlan + * Copyright (C) 2012 Christian Meier + * + * This file is part of ixtlan_gettext. + * + * ixtlan_gettext is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * ixtlan_gettext is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with ixtlan_gettext. If not, see . + */ + +package de.mkristian.ixtlan.gwt.locales; + +import java.util.List; + +import javax.inject.Inject; +import javax.inject.Singleton; + +import org.fusesource.restygwt.client.Method; + +import com.google.gwt.event.shared.EventBus; + +import de.mkristian.gwt.rails.RemoteNotifier; +import de.mkristian.gwt.rails.caches.RemoteReadOnlyAdapter; +import de.mkristian.gwt.rails.events.ModelEvent; +import de.mkristian.gwt.rails.events.ModelEvent.Action; + +@Singleton +public class LocaleRemoteReadOnly extends RemoteReadOnlyAdapter { + + private final LocalesRestService restService; + + @Inject + protected LocaleRemoteReadOnly( RemoteNotifier notifier, + EventBus eventBus, + LocalesRestService restService ) { + super( eventBus, notifier ); + this.restService = restService; + } + + @Override + protected ModelEvent newEvent(Method method, List models, Action action) { + return new LocaleEvent( method, models, action ); + } + + @Override + protected ModelEvent newEvent(Method method, Locale model, Action action) { + return new LocaleEvent( method, model, action ); + } + + @Override + protected LocaleEvent newEvent(Method method, Throwable e) { + return new LocaleEvent( method, e ); + } + + @Override + public void retrieveAll() { + notifier.loading(); + restService.index(newRetrieveAllCallback()); + } + + @Override + public void retrieve(int id) { + notifier.loading(); + restService.show(id, newRetrieveCallback()); + } +} \ No newline at end of file diff --git a/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/locales/LocalesRestService.java b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/locales/LocalesRestService.java new file mode 100644 index 0000000..dcc2e8b --- /dev/null +++ b/rails-gwt/src/main/java/de/mkristian/ixtlan/gwt/locales/LocalesRestService.java @@ -0,0 +1,23 @@ +package de.mkristian.ixtlan.gwt.locales; + +import de.mkristian.gwt.rails.dispatchers.DefaultDispatcherSingleton; + +import java.util.List; + +import javax.ws.rs.*; + +import org.fusesource.restygwt.client.MethodCallback; +import org.fusesource.restygwt.client.Options; +import org.fusesource.restygwt.client.RestService; + + +@Options(dispatcher = DefaultDispatcherSingleton.class) +public interface LocalesRestService extends RestService { + + @GET @Path("/locales") + void index(MethodCallback> callback); + + @GET @Path("/locales/{id}") + void show(@PathParam("id") int id, MethodCallback callback); + +}