001/* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, 013 * software distributed under the License is distributed on an 014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 * KIND, either express or implied. See the License for the 016 * specific language governing permissions and limitations 017 * under the License. 018 */ 019 020package org.apache.isis.objectstore.jdo.applib.service.settings; 021 022import java.util.List; 023 024import org.joda.time.LocalDate; 025 026import org.apache.isis.applib.AbstractService; 027import org.apache.isis.applib.annotation.ActionSemantics; 028import org.apache.isis.applib.annotation.ActionSemantics.Of; 029import org.apache.isis.applib.annotation.MemberOrder; 030import org.apache.isis.applib.annotation.Named; 031import org.apache.isis.applib.annotation.Optional; 032import org.apache.isis.applib.query.QueryDefault; 033import org.apache.isis.applib.services.settings.ApplicationSetting; 034import org.apache.isis.applib.services.settings.ApplicationSettingsService; 035import org.apache.isis.applib.services.settings.ApplicationSettingsServiceRW; 036import org.apache.isis.applib.services.settings.SettingAbstract; 037import org.apache.isis.applib.services.settings.SettingType; 038 039/** 040 * An implementation of {@link ApplicationSettingsService} that persists settings 041 * as entities into a JDO-backed database. 042 */ 043@Named("Application Settings") 044public class ApplicationSettingsServiceJdo extends AbstractService implements ApplicationSettingsServiceRW { 045 046 @ActionSemantics(Of.SAFE) 047 @Override 048 public ApplicationSetting find(@Named("Key") String key) { 049 return firstMatch( 050 new QueryDefault<ApplicationSettingJdo>(ApplicationSettingJdo.class, 051 "findByKey", 052 "key", key)); 053 } 054 055 // ////////////////////////////////////// 056 057 @ActionSemantics(Of.SAFE) 058 @MemberOrder(sequence="1") 059 @SuppressWarnings({ "rawtypes", "unchecked" }) 060 public List<ApplicationSetting> listAll() { 061 return (List)allMatches( 062 new QueryDefault<ApplicationSettingJdo>(ApplicationSettingJdo.class, 063 "findAll")); 064 } 065 066 // ////////////////////////////////////// 067 068 @MemberOrder(sequence="10") 069 @Override 070 public ApplicationSetting newString( 071 @Named("Key") String key, 072 @Named("Description") @Optional String description, 073 @Named("Value") String value) { 074 return newSetting(key, description, SettingType.STRING, value); 075 } 076 @MemberOrder(sequence="11") 077 @Override 078 public ApplicationSettingJdo newInt( 079 @Named("Key") String key, 080 @Named("Description") @Optional String description, 081 @Named("Value") Integer value) { 082 return newSetting(key, description, SettingType.INT, value.toString()); 083 } 084 @MemberOrder(sequence="12") 085 @Override 086 public ApplicationSettingJdo newLong( 087 @Named("Key") String key, 088 @Named("Description") @Optional String description, 089 @Named("Value") Long value) { 090 return newSetting(key, description, SettingType.LONG, value.toString()); 091 } 092 @MemberOrder(sequence="13") 093 @Override 094 public ApplicationSettingJdo newLocalDate( 095 @Named("Key") String key, 096 @Named("Description") @Optional String description, 097 @Named("Value") LocalDate value) { 098 return newSetting(key, description, SettingType.LOCAL_DATE, value.toString(SettingAbstract.DATE_FORMATTER)); 099 } 100 @MemberOrder(sequence="14") 101 @Override 102 public ApplicationSettingJdo newBoolean( 103 @Named("Key") String key, 104 @Named("Description") @Optional String description, 105 @Named("Value") @Optional Boolean value) { 106 return newSetting(key, description, SettingType.BOOLEAN, new Boolean(value != null && value).toString()); 107 } 108 109 private ApplicationSettingJdo newSetting( 110 String key, String description, SettingType settingType, final String valueRaw) { 111 final ApplicationSettingJdo setting = newTransientInstance(ApplicationSettingJdo.class); 112 setting.setKey(key); 113 setting.setDescription(description); 114 setting.setValueRaw(valueRaw); 115 setting.setType(settingType); 116 persist(setting); 117 return setting; 118 } 119 120}