/*
* JBoss, Home of Professional Open Source.
* Copyright 2013, Red Hat, Inc., and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.capedwarf.admin;
import java.util.Arrays;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named;
import com.google.appengine.api.capabilities.CapabilitiesServiceFactory;
import com.google.appengine.api.capabilities.Capability;
import com.google.appengine.api.capabilities.CapabilityStatus;
import org.jboss.capedwarf.capabilities.ExposedCapabilitiesService;
import static com.google.appengine.api.capabilities.Capability.*;
/**
* @author <a href="mailto:mluksa@redhat.com">Marko Luksa</a>
*/
@Named
@RequestScoped
public class Capabilities {
private static final List<NamedCapability> KNOWN_CAPABILITIES = Arrays.asList(
new NamedCapability("BLOBSTORE", BLOBSTORE),
new NamedCapability("DATASTORE", DATASTORE),
new NamedCapability("DATASTORE_WRITE", DATASTORE_WRITE),
new NamedCapability("IMAGES", IMAGES),
new NamedCapability("MAIL", MAIL),
new NamedCapability("MEMCACHE", MEMCACHE),
new NamedCapability("PROSPECTIVE_SEARCH", PROSPECTIVE_SEARCH),
new NamedCapability("TASKQUEUE", TASKQUEUE),
new NamedCapability("URL_FETCH", URL_FETCH),
new NamedCapability("XMPP", XMPP));
private ExposedCapabilitiesService service;
@Inject
@HttpParam("BLOBSTORE")
private String blobstoreStatus;
@Inject
@HttpParam("DATASTORE")
private String datastoreStatus;
@Inject
@HttpParam("DATASTORE_WRITE")
private String datastoreWriteStatus;
@Inject
@HttpParam("IMAGES")
private String imagesStatus;
@Inject
@HttpParam("MAIL")
private String mailStatus;
@Inject
@HttpParam("MEMCACHE")
private String memcacheStatus;
@Inject
@HttpParam("PROSPECTIVE_SEARCH")
private String prospectiveSearchStatus;
@Inject
@HttpParam("TASKQUEUE")
private String taskQueueStatus;
@Inject
@HttpParam("URL_FETCH")
private String urlFetchStatus;
@Inject
@HttpParam("XMPP")
private String xmppStatus;
@PostConstruct
public void init() {
service = (ExposedCapabilitiesService) CapabilitiesServiceFactory.getCapabilitiesService();
updateStatus(Capability.BLOBSTORE, blobstoreStatus);
updateStatus(Capability.DATASTORE, datastoreStatus);
updateStatus(Capability.DATASTORE_WRITE, datastoreWriteStatus);
updateStatus(Capability.IMAGES, imagesStatus);
updateStatus(Capability.MAIL, mailStatus);
updateStatus(Capability.MEMCACHE, memcacheStatus);
updateStatus(Capability.PROSPECTIVE_SEARCH, prospectiveSearchStatus);
updateStatus(Capability.TASKQUEUE, taskQueueStatus);
updateStatus(Capability.URL_FETCH, urlFetchStatus);
updateStatus(Capability.XMPP, xmppStatus);
}
private void updateStatus(Capability capability, String statusName) {
if (statusName == null) {
return;
}
CapabilityStatus status = CapabilityStatus.valueOf(statusName);
service.setCapabilityStatus(capability, status);
}
public List<NamedCapability> getCapabilities() {
return KNOWN_CAPABILITIES;
}
public CapabilityStatus getStatus(Capability capability) {
return service.getStatus(capability).getStatus();
}
public static class NamedCapability {
private String name;
private Capability capability;
public NamedCapability(String name, Capability capability) {
this.name = name;
this.capability = capability;
}
public String getName() {
return name;
}
public Capability getCapability() {
return capability;
}
}
}