
org.incode.example.settings.dom.jdo.SettingAbstractJdo Maven / Gradle / Ivy
package org.incode.example.settings.dom.jdo;
import javax.inject.Inject;
import javax.jdo.annotations.PersistenceCapable;
import org.joda.time.LocalDate;
import org.apache.isis.applib.annotation.Action;
import org.apache.isis.applib.annotation.ActionLayout;
import org.apache.isis.applib.annotation.Optionality;
import org.apache.isis.applib.annotation.Parameter;
import org.apache.isis.applib.annotation.ParameterLayout;
import org.apache.isis.applib.annotation.SemanticsOf;
import org.apache.isis.applib.services.message.MessageService;
import org.apache.isis.applib.services.repository.RepositoryService;
import org.incode.example.settings.SettingsModule;
import org.incode.example.settings.dom.Setting;
import org.incode.example.settings.dom.SettingAbstract;
import org.incode.example.settings.dom.SettingType;
import lombok.Getter;
import lombok.Setter;
/**
* Factors out common implementation; however this is not annotated with {@link PersistenceCapable},
* so that each subclass is its own root entity.
*/
public abstract class SettingAbstractJdo extends SettingAbstract implements Setting {
//region > domain events
public static abstract class PropertyDomainEvent
extends SettingsModule.PropertyDomainEvent { }
public static abstract class CollectionDomainEvent
extends SettingsModule.CollectionDomainEvent { }
public static abstract class ActionDomainEvent
extends SettingsModule.ActionDomainEvent { }
//endregion
@javax.jdo.annotations.Column(allowsNull="false")
@Getter @Setter
private String key;
@Getter @Setter
private String description;
@javax.jdo.annotations.Column(allowsNull="false")
@Getter @Setter
private SettingType type;
@javax.jdo.annotations.Column(allowsNull="false")
@Getter @Setter
private String valueRaw;
//region > updateDescription (action)
public static class UpdateDescriptionDomainEvent
extends ActionDomainEvent {
}
@Action(
domainEvent = UpdateDescriptionDomainEvent.class
)
public SettingAbstractJdo updateDescription(
@Parameter(optionality = Optionality.OPTIONAL)
@ParameterLayout(named = "Description")
final String description) {
setDescription(description);
return this;
}
public String default0UpdateDescription() {
return getDescription();
}
//endregion
//region > updateAsString (action)
public static class UpdateAsStringDomainEvent extends ActionDomainEvent {
}
@Action(
domainEvent = UpdateAsStringDomainEvent.class
)
public SettingAbstractJdo updateAsString(
@ParameterLayout(named = "Value")
final String value) {
setValueRaw(value);
return this;
}
public String default0UpdateAsString() {
return getValueAsString();
}
public boolean hideUpdateAsString() {
return typeIsNot(SettingType.STRING);
}
//endregion
//region > updateAsInt (action)
public static class UpdateAsIntDomainEvent extends ActionDomainEvent {
}
@Action(
domainEvent = UpdateAsIntDomainEvent.class
)
public SettingAbstractJdo updateAsInt(
@ParameterLayout(named = "Value")
final Integer value) {
setValueRaw(value.toString());
return this;
}
public Integer default0UpdateAsInt() {
return getValueAsInt();
}
public boolean hideUpdateAsInt() {
return typeIsNot(SettingType.INT);
}
//endregion
//region > updateAsLong (action)
public static class UpdateAsLongDomainEvent extends ActionDomainEvent {
}
@Action(
domainEvent = UpdateAsLongDomainEvent.class
)
public SettingAbstractJdo updateAsLong(
@ParameterLayout(named = "Value") final
Long value) {
setValueRaw(value.toString());
return this;
}
public Long default0UpdateAsLong() {
return getValueAsLong();
}
public boolean hideUpdateAsLong() {
return typeIsNot(SettingType.LONG);
}
//endregion
//region > updateAsLocalDate (action)
public static class UpdateAsLocalDateDomainEvent extends ActionDomainEvent {
}
@Action(
domainEvent = UpdateAsLocalDateDomainEvent.class
)
public SettingAbstractJdo updateAsLocalDate(
@ParameterLayout(named = "Value")
final LocalDate value) {
setValueRaw(value.toString(DATE_FORMATTER));
return this;
}
public LocalDate default0UpdateAsLocalDate() {
return getValueAsLocalDate();
}
public boolean hideUpdateAsLocalDate() {
return typeIsNot(SettingType.LOCAL_DATE);
}
//endregion
//region > updateAsBoolean (action)
public static class UpdateAsBooleanDomainEvent extends ActionDomainEvent {
}
@Action(
domainEvent = UpdateAsBooleanDomainEvent.class
)
public SettingAbstractJdo updateAsBoolean(
@ParameterLayout(named = "Value")
final Boolean value) {
setValueRaw(value.toString());
return this;
}
public Boolean default0UpdateAsBoolean() {
return getValueAsBoolean();
}
public boolean hideUpdateAsBoolean() {
return typeIsNot(SettingType.BOOLEAN);
}
//endregion
//region > delete (action)
public static class DeleteDomainEvent extends ActionDomainEvent {
}
@Action(
domainEvent = DeleteDomainEvent.class,
semantics = SemanticsOf.IDEMPOTENT_ARE_YOU_SURE
)
@ActionLayout(
cssClassFa = "trash",
cssClass = "btn-warning"
)
public SettingAbstractJdo delete() {
repositoryService.remove(this);
messageService.informUser("Setting deleted");
return null;
}
//endregion
//region > injected services
@Inject
MessageService messageService;
@Inject
RepositoryService repositoryService;
//endregion
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy