/******************************************************************************* * Copyright (c) 2010-2014 SAP AG and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * SAP AG - initial API and implementation *******************************************************************************/ package org.eclipse.skalli.core.permit; import java.text.MessageFormat; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.eclipse.skalli.commons.UUIDUtils; import org.eclipse.skalli.model.Issuer; import org.eclipse.skalli.services.configuration.ConfigResourceBase; import org.eclipse.skalli.services.configuration.ConfigurationService; import org.eclipse.skalli.services.permit.Permits; import org.restlet.data.Status; import org.restlet.representation.Representation; import org.restlet.resource.Delete; import com.thoughtworks.xstream.converters.Converter; public class PermitResource extends ConfigResourceBase<PermitConfig> implements Issuer { private static final String PARAM_ID = "id"; //$NON-NLS-1$ @Override protected Class<PermitConfig> getConfigClass() { return PermitConfig.class; } @Override protected PermitConfig readConfig(ConfigurationService configService, Map<String, Object> requestAttributes) { PermitsConfig permitsConfig = readPermitsConfig(configService); if (permitsConfig == null) { return null; } String id = (String)requestAttributes.get(PARAM_ID); if (UUIDUtils.isUUID(id)) { return permitsConfig.get(UUIDUtils.asUUID(id)); } return null; } @Override protected void storeConfig(ConfigurationService configService, PermitConfig configObject, Map<String, Object> requestAttributes) { PermitsConfig permitsConfig = readPermitsConfig(configService); if (permitsConfig == null) { permitsConfig = new PermitsConfig(); } String id = (String)requestAttributes.get(PARAM_ID); if (UUIDUtils.isUUID(id)) { configObject.setUuid(UUIDUtils.asUUID(id)); } permitsConfig.add(configObject); storePermitsConfig(configService, permitsConfig); } @Delete public final Representation remove() { if (!Permits.isAllowed(getAction(), getPath())) { return createUnauthorizedRepresentation(); } ConfigurationService configService = getConfigService(); if (configService == null) { String errorId = MessageFormat.format(ERROR_ID_NO_CONFIGURATION_SERVICE_AVAILABLE, getPath()); return createServiceUnavailableRepresentation(errorId, "Configuration Service"); } String id = (String)getRequestAttributes().get(PARAM_ID); if (!UUIDUtils.isUUID(id)) { setStatus(Status.CLIENT_ERROR_BAD_REQUEST, MessageFormat.format("''{0}'' is not a valid permit id", id)); return null; } PermitsConfig permitsConfig = readPermitsConfig(configService); if (permitsConfig == null) { setStatus(Status.CLIENT_ERROR_NOT_FOUND, "Permit with id ''{0}'' not found"); return null; } PermitConfig stored = permitsConfig.remove(UUIDUtils.asUUID(id)); if (stored == null) { setStatus(Status.CLIENT_ERROR_NOT_FOUND, "Permit with id ''{0}'' not found"); return null; } storePermitsConfig(configService, permitsConfig); setStatus(Status.SUCCESS_NO_CONTENT); return null; } private PermitsConfig readPermitsConfig(ConfigurationService configService) { return configService.readConfiguration(PermitsConfig.class); } private void storePermitsConfig(ConfigurationService configService, PermitsConfig configObject) { configService.writeConfiguration(configObject); } @Override protected List<Converter> getAdditionalConverters() { List<Converter> ret = new ArrayList<Converter>(); ret.add(new PermitConfigConverter(getHost())); return ret; } }