All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.incode.example.settings.dom.ApplicationSettingRepository Maven / Gradle / Ivy

package org.incode.example.settings.dom;

import java.util.List;
import java.util.concurrent.Callable;

import javax.inject.Inject;

import org.joda.time.LocalDate;

import org.apache.isis.applib.annotation.DomainService;
import org.apache.isis.applib.annotation.NatureOfService;
import org.apache.isis.applib.annotation.Programmatic;
import org.apache.isis.applib.query.QueryDefault;
import org.apache.isis.applib.services.queryresultscache.QueryResultsCache;
import org.apache.isis.applib.services.repository.RepositoryService;

import org.incode.example.settings.dom.jdo.ApplicationSettingJdo;

@DomainService(
        nature = NatureOfService.DOMAIN,
        repositoryFor = ApplicationSettingJdo.class
)
public class ApplicationSettingRepository {

    //region > find
    @Programmatic
    public ApplicationSetting find(final String key) {
        return queryResultsCache.execute(new Callable() {
            @Override
            public ApplicationSetting call() throws Exception {
                return doFind(key);
            }
        }, ApplicationSettingRepository.class, "find", key);
    }

    protected ApplicationSettingJdo doFind(final String key) {
        return repositoryService.firstMatch(
                new QueryDefault<>(ApplicationSettingJdo.class,
                        "findByKey",
                        "key", key));
    }

    //endregion

    //region > listAll

    @Programmatic
    @SuppressWarnings({ "rawtypes", "unchecked" })
    public List listAll() {
        return (List)repositoryService.allMatches(
                new QueryDefault<>(ApplicationSettingJdo.class,
                        "findAll"));
    }
    //endregion

    //region > newString
    @Programmatic
    public ApplicationSetting newString(
            final String key,
            final String description,
            final String value) {
        return newSetting(key, description, SettingType.STRING, value);
    }
    //endregion

    //region > newInt

    @Programmatic
    public ApplicationSettingJdo newInt(
            final String key,
            final String description,
            final Integer value) {
        return newSetting(key, description, SettingType.INT, value.toString());
    }

    //endregion

    //region > newLong

    @Programmatic
    public ApplicationSettingJdo newLong(
            final String key,
            final String description,
            final Long value) {
        return newSetting(key, description, SettingType.LONG, value.toString());
    }

    //endregion

    //region > newLocalDate

    @Programmatic
    public ApplicationSettingJdo newLocalDate(
            final String key,
            final String description,
            final LocalDate value) {
        return newSetting(key, description, SettingType.LOCAL_DATE, value.toString(SettingAbstract.DATE_FORMATTER));
    }

    //endregion

    //region > newBoolean

    @Programmatic
    public ApplicationSettingJdo newBoolean(
            final String key,
            final String description,
            final Boolean value) {
        return newSetting(key, description, SettingType.BOOLEAN, Boolean.toString(value != null && value));
    }

    //endregion

    //region > helpers
    private ApplicationSettingJdo newSetting(
            final String key, final String description, final SettingType settingType, final String valueRaw) {
        final ApplicationSettingJdo setting = repositoryService.instantiate(ApplicationSettingJdo.class);
        setting.setKey(key);
        setting.setDescription(description);
        setting.setValueRaw(valueRaw);
        setting.setType(settingType);
        repositoryService.persist(setting);
        return setting;
    }
    //endregion

    //region > injected
    @Inject
    RepositoryService repositoryService;
    @Inject
    QueryResultsCache queryResultsCache;
    //endregion

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy