parent
5978b40989
commit
d6758f478f
|
|
@ -33,7 +33,6 @@ import org.libreccm.sites.SiteRepository;
|
||||||
import org.libreccm.web.ApplicationRepository;
|
import org.libreccm.web.ApplicationRepository;
|
||||||
import org.libreccm.web.CcmApplication;
|
import org.libreccm.web.CcmApplication;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import javax.enterprise.context.RequestScoped;
|
import javax.enterprise.context.RequestScoped;
|
||||||
|
|
|
||||||
|
|
@ -24,21 +24,28 @@ import org.libreccm.api.admin.categorization.dto.DomainOwnershipData;
|
||||||
import org.libreccm.api.admin.web.dto.CcmApplicationDto;
|
import org.libreccm.api.admin.web.dto.CcmApplicationDto;
|
||||||
import org.libreccm.api.dto.ListView;
|
import org.libreccm.api.dto.ListView;
|
||||||
import org.libreccm.core.CoreConstants;
|
import org.libreccm.core.CoreConstants;
|
||||||
|
import org.libreccm.l10n.LocalizedString;
|
||||||
import org.libreccm.security.AuthorizationRequired;
|
import org.libreccm.security.AuthorizationRequired;
|
||||||
import org.libreccm.security.RequiresPrivilege;
|
import org.libreccm.security.RequiresPrivilege;
|
||||||
import org.libreccm.sites.SiteAwareApplicationRepository;
|
import org.libreccm.sites.SiteAwareApplicationRepository;
|
||||||
|
import org.libreccm.web.ApplicationCreateException;
|
||||||
|
import org.libreccm.web.ApplicationManager;
|
||||||
import org.libreccm.web.ApplicationRepository;
|
import org.libreccm.web.ApplicationRepository;
|
||||||
|
import org.libreccm.web.ApplicationType;
|
||||||
import org.libreccm.web.CcmApplication;
|
import org.libreccm.web.CcmApplication;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import javax.enterprise.context.RequestScoped;
|
import javax.enterprise.context.RequestScoped;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.transaction.Transactional;
|
import javax.transaction.Transactional;
|
||||||
|
import javax.ws.rs.BadRequestException;
|
||||||
import javax.ws.rs.Consumes;
|
import javax.ws.rs.Consumes;
|
||||||
import javax.ws.rs.DELETE;
|
import javax.ws.rs.DELETE;
|
||||||
import javax.ws.rs.DefaultValue;
|
import javax.ws.rs.DefaultValue;
|
||||||
import javax.ws.rs.GET;
|
import javax.ws.rs.GET;
|
||||||
|
import javax.ws.rs.InternalServerErrorException;
|
||||||
import javax.ws.rs.NotFoundException;
|
import javax.ws.rs.NotFoundException;
|
||||||
import javax.ws.rs.POST;
|
import javax.ws.rs.POST;
|
||||||
import javax.ws.rs.PUT;
|
import javax.ws.rs.PUT;
|
||||||
|
|
@ -46,8 +53,10 @@ import javax.ws.rs.Path;
|
||||||
import javax.ws.rs.PathParam;
|
import javax.ws.rs.PathParam;
|
||||||
import javax.ws.rs.Produces;
|
import javax.ws.rs.Produces;
|
||||||
import javax.ws.rs.QueryParam;
|
import javax.ws.rs.QueryParam;
|
||||||
|
import javax.ws.rs.core.Context;
|
||||||
import javax.ws.rs.core.MediaType;
|
import javax.ws.rs.core.MediaType;
|
||||||
import javax.ws.rs.core.Response;
|
import javax.ws.rs.core.Response;
|
||||||
|
import javax.ws.rs.core.UriInfo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
|
@ -57,6 +66,12 @@ import javax.ws.rs.core.Response;
|
||||||
@Path("/applications/")
|
@Path("/applications/")
|
||||||
public class CcmApplicationsApi {
|
public class CcmApplicationsApi {
|
||||||
|
|
||||||
|
@Context
|
||||||
|
private UriInfo uriInfo;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private ApplicationManager applicationManager;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private ApplicationRepository applicationRepository;
|
private ApplicationRepository applicationRepository;
|
||||||
|
|
||||||
|
|
@ -121,8 +136,82 @@ public class CcmApplicationsApi {
|
||||||
@AuthorizationRequired
|
@AuthorizationRequired
|
||||||
@RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN)
|
@RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN)
|
||||||
@Transactional(Transactional.TxType.REQUIRED)
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
|
|
||||||
public Response createApplication(final CcmApplicationDto applicationData) {
|
public Response createApplication(final CcmApplicationDto applicationData) {
|
||||||
throw new UnsupportedOperationException();
|
|
||||||
|
final String applicationClassName = applicationData
|
||||||
|
.getApplicationClassName();
|
||||||
|
final String path = applicationData.getPrimaryUrl();
|
||||||
|
|
||||||
|
final LocalizedString title = applicationData.getTitle();
|
||||||
|
final LocalizedString description = applicationData.getDescription();
|
||||||
|
|
||||||
|
final Class<?> clazz;
|
||||||
|
try {
|
||||||
|
clazz = Class.forName(applicationClassName);
|
||||||
|
|
||||||
|
} catch (ClassNotFoundException ex) {
|
||||||
|
throw new BadRequestException(
|
||||||
|
String.format(
|
||||||
|
"No class for applicationClassName \"%s\" found.",
|
||||||
|
applicationClassName
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (!CcmApplication.class.isAssignableFrom(clazz)) {
|
||||||
|
throw new BadRequestException(
|
||||||
|
String.format(
|
||||||
|
"The provided class \"%s\" is not an subclass of \"%s\".)",
|
||||||
|
clazz.getName(),
|
||||||
|
CcmApplication.class.getName()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
final Class<? extends CcmApplication> applicationClass
|
||||||
|
= (Class<? extends CcmApplication>) clazz;
|
||||||
|
|
||||||
|
final Map<String, ApplicationType> applicationTypes = applicationManager
|
||||||
|
.getApplicationTypes();
|
||||||
|
|
||||||
|
if (!applicationTypes.containsKey(applicationClass.getName())) {
|
||||||
|
throw new NotFoundException(
|
||||||
|
String.format(
|
||||||
|
"No application type for class \"%s\" available.",
|
||||||
|
applicationClass.getName()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
final ApplicationType applicationType = applicationTypes.get(
|
||||||
|
applicationClass.getName()
|
||||||
|
);
|
||||||
|
|
||||||
|
final CcmApplication application;
|
||||||
|
try {
|
||||||
|
application = applicationManager.createInstance(
|
||||||
|
applicationType, path, applicationClass
|
||||||
|
);
|
||||||
|
} catch (ApplicationCreateException ex) {
|
||||||
|
throw new InternalServerErrorException(
|
||||||
|
String.format(
|
||||||
|
"Failed to created new application of type \"%s\".",
|
||||||
|
applicationClass.getName()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
application.setTitle(title);
|
||||||
|
application.setDescription(description);
|
||||||
|
|
||||||
|
return Response
|
||||||
|
.created(
|
||||||
|
uriInfo
|
||||||
|
.getBaseUriBuilder()
|
||||||
|
.path(path)
|
||||||
|
.build()
|
||||||
|
).build();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@PUT
|
@PUT
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,8 @@ public class CcmApplicationDto {
|
||||||
|
|
||||||
private String created;
|
private String created;
|
||||||
|
|
||||||
|
private String applicationClassName;
|
||||||
|
|
||||||
private String applicationType;
|
private String applicationType;
|
||||||
|
|
||||||
private String primaryUrl;
|
private String primaryUrl;
|
||||||
|
|
@ -74,6 +76,7 @@ public class CcmApplicationDto {
|
||||||
created = DateTimeFormatter.ISO_DATE_TIME.format(
|
created = DateTimeFormatter.ISO_DATE_TIME.format(
|
||||||
application.getCreated().toInstant()
|
application.getCreated().toInstant()
|
||||||
);
|
);
|
||||||
|
applicationClassName = application.getClass().getName();
|
||||||
applicationType = application.getApplicationType();
|
applicationType = application.getApplicationType();
|
||||||
primaryUrl = application.getPrimaryUrl();
|
primaryUrl = application.getPrimaryUrl();
|
||||||
domains = application
|
domains = application
|
||||||
|
|
@ -130,6 +133,14 @@ public class CcmApplicationDto {
|
||||||
this.created = created;
|
this.created = created;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getApplicationClassName() {
|
||||||
|
return applicationClassName;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setApplicationClassName(final String applicationClassName) {
|
||||||
|
this.applicationClassName = applicationClassName;
|
||||||
|
}
|
||||||
|
|
||||||
public String getApplicationType() {
|
public String getApplicationType() {
|
||||||
return applicationType;
|
return applicationType;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue