Merge branch 'master' of ../rest
This commit is contained in:
commit
f235cf6a4f
|
@ -0,0 +1,5 @@
|
|||
target/
|
||||
.project
|
||||
.settings
|
||||
.classpath
|
||||
.DS_Store
|
|
@ -0,0 +1,202 @@
|
|||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
|
@ -0,0 +1,6 @@
|
|||
li.strolch.rest
|
||||
==================
|
||||
|
||||
[![Build Status](http://jenkins.eitchnet.ch/buildStatus/icon?job=li.strolch.rest)](http://jenkins.eitchnet.ch/view/strolch/job/li.strolch.rest/)
|
||||
|
||||
Restful Web Service API for Strolch
|
|
@ -0,0 +1,166 @@
|
|||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<parent>
|
||||
<groupId>li.strolch</groupId>
|
||||
<artifactId>li.strolch.parent</artifactId>
|
||||
<version>1.0.0-SNAPSHOT</version>
|
||||
<relativePath>../li.strolch.parent/pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<artifactId>li.strolch.rest</artifactId>
|
||||
|
||||
<name>li.strolch.rest</name>
|
||||
<description>Restful Web Service API for Strolch</description>
|
||||
|
||||
<url>https://github.com/eitchnet/li.strolch.rest</url>
|
||||
|
||||
<inceptionYear>2011</inceptionYear>
|
||||
|
||||
<issueManagement>
|
||||
<system>Github Issues</system>
|
||||
<url>https://github.com/eitchnet/li.strolch.rest/issues</url>
|
||||
</issueManagement>
|
||||
|
||||
<scm>
|
||||
<connection>scm:git:https://github.com/eitchnet/li.strolch.rest.git</connection>
|
||||
<developerConnection>scm:git:git@github.com:eitch/li.strolch.rest.git</developerConnection>
|
||||
<url>https://github.com/eitchnet/li.strolch.rest</url>
|
||||
</scm>
|
||||
|
||||
<properties>
|
||||
<jersey.version>2.11</jersey.version>
|
||||
<!-- <org.eclipse.persistence.version>2.5.1</org.eclipse.persistence.version> -->
|
||||
</properties>
|
||||
|
||||
<dependencyManagement>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.glassfish.jersey</groupId>
|
||||
<artifactId>jersey-bom</artifactId>
|
||||
<version>${jersey.version}</version>
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
<!-- due to bug in persistence 2.5.0 -->
|
||||
<!-- <dependency> -->
|
||||
<!-- <groupId>org.eclipse.persistence</groupId> -->
|
||||
<!-- <artifactId>org.eclipse.persistence.moxy</artifactId> -->
|
||||
<!-- <version>${org.eclipse.persistence.version}</version> -->
|
||||
<!-- </dependency> -->
|
||||
<!-- <dependency> -->
|
||||
<!-- <groupId>org.eclipse.persistence</groupId> -->
|
||||
<!-- <artifactId>org.eclipse.persistence.antlr</artifactId> -->
|
||||
<!-- <version>${org.eclipse.persistence.version}</version> -->
|
||||
<!-- </dependency> -->
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
||||
<dependencies>
|
||||
<!-- main -->
|
||||
<dependency>
|
||||
<groupId>li.strolch</groupId>
|
||||
<artifactId>li.strolch.model</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>li.strolch</groupId>
|
||||
<artifactId>li.strolch.agent</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>li.strolch</groupId>
|
||||
<artifactId>li.strolch.service</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- Servlet 3.0 API -->
|
||||
<dependency>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>javax.servlet-api</artifactId>
|
||||
<version>3.0.1</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<!-- Restful API -->
|
||||
<dependency>
|
||||
<groupId>org.glassfish.jersey.containers</groupId>
|
||||
<!-- if your container implements Servlet API older than 3.0, use "jersey-container-servlet-core" -->
|
||||
<artifactId>jersey-container-servlet</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.glassfish.jersey.media</groupId>
|
||||
<artifactId>jersey-media-moxy</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- test dependencies -->
|
||||
<dependency>
|
||||
<groupId>li.strolch</groupId>
|
||||
<artifactId>li.strolch.testbase</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.glassfish.jersey.test-framework</groupId>
|
||||
<artifactId>jersey-test-framework-core</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.glassfish.jersey.containers</groupId>
|
||||
<artifactId>jersey-container-grizzly2-servlet</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.glassfish.jersey.containers</groupId>
|
||||
<artifactId>jersey-container-grizzly2-http</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.glassfish.jersey.test-framework.providers</groupId>
|
||||
<artifactId>jersey-test-framework-provider-bundle</artifactId>
|
||||
<type>pom</type>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>src/main/resources</directory>
|
||||
<filtering>true</filtering>
|
||||
<includes>
|
||||
<include>**/componentVersion.properties</include>
|
||||
</includes>
|
||||
</resource>
|
||||
</resources>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>buildnumber-maven-plugin</artifactId>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-eclipse-plugin</artifactId>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-source-plugin</artifactId>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-site-plugin</artifactId>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
|
@ -0,0 +1,129 @@
|
|||
/*
|
||||
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package li.strolch.rest;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import li.strolch.agent.api.ComponentContainer;
|
||||
import li.strolch.agent.api.StrolchComponent;
|
||||
import li.strolch.exception.StrolchException;
|
||||
import li.strolch.runtime.configuration.ComponentConfiguration;
|
||||
import li.strolch.runtime.privilege.PrivilegeHandler;
|
||||
import ch.eitchnet.privilege.model.Certificate;
|
||||
import ch.eitchnet.utils.dbc.DBC;
|
||||
|
||||
/**
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
public class DefaultStrolchSessionHandler extends StrolchComponent implements StrolchSessionHandler {
|
||||
|
||||
private static final String PARAM_SESSION_ORIGIN = "session.origin"; //$NON-NLS-1$
|
||||
private static final String PARAM_VALIDATE_ORIGIN = "validateOrigin"; //$NON-NLS-1$
|
||||
private PrivilegeHandler privilegeHandler;
|
||||
private Map<String, Certificate> certificateMap;
|
||||
private boolean validateOrigin;
|
||||
|
||||
/**
|
||||
* @param container
|
||||
* @param componentName
|
||||
*/
|
||||
public DefaultStrolchSessionHandler(ComponentContainer container, String componentName) {
|
||||
super(container, componentName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initialize(ComponentConfiguration configuration) {
|
||||
this.validateOrigin = configuration.getBoolean(PARAM_VALIDATE_ORIGIN, false);
|
||||
super.initialize(configuration);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void start() {
|
||||
this.privilegeHandler = getContainer().getComponent(PrivilegeHandler.class);
|
||||
this.certificateMap = new HashMap<>();
|
||||
super.start();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stop() {
|
||||
if (this.certificateMap != null) {
|
||||
for (Certificate certificate : this.certificateMap.values()) {
|
||||
this.privilegeHandler.invalidateSession(certificate);
|
||||
}
|
||||
this.certificateMap.clear();
|
||||
}
|
||||
this.privilegeHandler = null;
|
||||
super.stop();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroy() {
|
||||
this.certificateMap = null;
|
||||
super.destroy();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Certificate authenticate(String origin, String username, byte[] password) {
|
||||
DBC.PRE.assertNotEmpty("Origin must be set!", username); //$NON-NLS-1$
|
||||
DBC.PRE.assertNotEmpty("Username must be set!", username); //$NON-NLS-1$
|
||||
DBC.PRE.assertNotNull("Passwort must be set", password); //$NON-NLS-1$
|
||||
|
||||
Certificate certificate = this.privilegeHandler.authenticate(username, password);
|
||||
certificate.getSessionDataMap().put(PARAM_SESSION_ORIGIN, origin);
|
||||
this.certificateMap.put(certificate.getAuthToken(), certificate);
|
||||
|
||||
return certificate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Certificate validate(String origin, String authToken) {
|
||||
DBC.PRE.assertNotEmpty("Origin must be set!", origin); //$NON-NLS-1$
|
||||
DBC.PRE.assertNotEmpty("SessionId must be set!", authToken); //$NON-NLS-1$
|
||||
|
||||
Certificate certificate = this.certificateMap.get(authToken);
|
||||
if (certificate == null)
|
||||
throw new StrolchException(MessageFormat.format("No certificate exists for sessionId {0}", authToken)); //$NON-NLS-1$
|
||||
|
||||
this.privilegeHandler.isCertificateValid(certificate);
|
||||
|
||||
if (this.validateOrigin && !origin.equals(certificate.getSessionDataMap().get(PARAM_SESSION_ORIGIN))) {
|
||||
String msg = MessageFormat.format("Illegal request for origin {0} and sessionId {1}", origin, authToken); //$NON-NLS-1$
|
||||
throw new StrolchException(msg);
|
||||
}
|
||||
|
||||
return certificate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invalidateSession(String origin, Certificate certificate) {
|
||||
DBC.PRE.assertNotEmpty("Origin must be set!", origin); //$NON-NLS-1$
|
||||
DBC.PRE.assertNotNull("Certificate must bet given!", certificate); //$NON-NLS-1$
|
||||
|
||||
if (this.validateOrigin && !origin.equals(certificate.getSessionDataMap().get(PARAM_SESSION_ORIGIN))) {
|
||||
String msg = MessageFormat.format("Illegal request for origin {0} and sessionId {1}", origin, //$NON-NLS-1$
|
||||
certificate.getAuthToken());
|
||||
throw new StrolchException(msg);
|
||||
}
|
||||
|
||||
Certificate removedCert = this.certificateMap.remove(certificate.getAuthToken());
|
||||
if (removedCert == null)
|
||||
logger.error(MessageFormat.format("No session was registered with token {0}", certificate.getAuthToken())); //$NON-NLS-1$
|
||||
|
||||
this.privilegeHandler.invalidateSession(certificate);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,88 @@
|
|||
/*
|
||||
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package li.strolch.rest;
|
||||
|
||||
import li.strolch.agent.api.ComponentContainer;
|
||||
import li.strolch.agent.api.StrolchComponent;
|
||||
import li.strolch.rest.filters.AccessControlResponseFilter;
|
||||
import li.strolch.runtime.configuration.ComponentConfiguration;
|
||||
import li.strolch.runtime.privilege.PrivilegeHandler;
|
||||
import ch.eitchnet.utils.dbc.DBC;
|
||||
|
||||
/**
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
public class RestfulStrolchComponent extends StrolchComponent {
|
||||
|
||||
private static final String PARAM_CORS_ENABLED = "corsEnabled"; //$NON-NLS-1$
|
||||
private static final String PARAM_CORS_ORIGIN = "corsOrigin"; //$NON-NLS-1$
|
||||
private static RestfulStrolchComponent instance;
|
||||
|
||||
/**
|
||||
* @param container
|
||||
* @param componentName
|
||||
*/
|
||||
public RestfulStrolchComponent(ComponentContainer container, String componentName) {
|
||||
super(container, componentName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initialize(ComponentConfiguration configuration) {
|
||||
|
||||
if (configuration.getBoolean(PARAM_CORS_ENABLED, Boolean.FALSE)) {
|
||||
String origin = configuration.getString(PARAM_CORS_ORIGIN, null);
|
||||
logger.info("Enabling CORS for origin: " + origin); //$NON-NLS-1$
|
||||
AccessControlResponseFilter.setCorsEnabled(true);
|
||||
AccessControlResponseFilter.setOrigin(origin);
|
||||
}
|
||||
|
||||
super.initialize(configuration);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void start() {
|
||||
DBC.PRE.assertNull("Instance is already set! This component is a singleton resource!", instance); //$NON-NLS-1$
|
||||
instance = this;
|
||||
super.start();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stop() {
|
||||
instance = null;
|
||||
super.stop();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the RestfulStrolchComponent
|
||||
*/
|
||||
public static RestfulStrolchComponent getInstance() {
|
||||
DBC.PRE.assertNotNull("Not yet initialized!", instance); //$NON-NLS-1$
|
||||
return instance;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ComponentContainer getContainer() {
|
||||
return super.getContainer();
|
||||
}
|
||||
|
||||
public <T> T getComponent(Class<T> clazz) {
|
||||
return getContainer().getComponent(clazz);
|
||||
}
|
||||
|
||||
public PrivilegeHandler getPrivilegeHandler() {
|
||||
return getContainer().getPrivilegeHandler();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,62 @@
|
|||
/*
|
||||
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package li.strolch.rest;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import li.strolch.rest.endpoint.AuthenticationService;
|
||||
import li.strolch.rest.endpoint.EnumQuery;
|
||||
import li.strolch.rest.endpoint.Inspector;
|
||||
import li.strolch.rest.endpoint.VersionQuery;
|
||||
import li.strolch.rest.filters.AccessControlResponseFilter;
|
||||
import li.strolch.rest.filters.AuthenicationRequestFilter;
|
||||
import li.strolch.rest.filters.AuthenicationResponseFilter;
|
||||
|
||||
/**
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
public class StrolchRestfulClasses {
|
||||
|
||||
public static Set<Class<?>> restfulClasses;
|
||||
public static Set<Class<?>> providerClasses;
|
||||
|
||||
static {
|
||||
Set<Class<?>> restfulClasses = new HashSet<>();
|
||||
restfulClasses.add(AuthenticationService.class);
|
||||
restfulClasses.add(Inspector.class);
|
||||
restfulClasses.add(VersionQuery.class);
|
||||
restfulClasses.add(EnumQuery.class);
|
||||
|
||||
Set<Class<?>> providerClasses = new HashSet<>();
|
||||
providerClasses.add(StrolchRestfulExceptionMapper.class);
|
||||
providerClasses.add(AccessControlResponseFilter.class);
|
||||
providerClasses.add(AuthenicationRequestFilter.class);
|
||||
providerClasses.add(AuthenicationResponseFilter.class);
|
||||
|
||||
StrolchRestfulClasses.restfulClasses = Collections.unmodifiableSet(restfulClasses);
|
||||
StrolchRestfulClasses.providerClasses = Collections.unmodifiableSet(providerClasses);
|
||||
}
|
||||
|
||||
public static Set<Class<?>> getRestfulClasses() {
|
||||
return restfulClasses;
|
||||
}
|
||||
|
||||
public static Set<Class<?>> getProviderClasses() {
|
||||
return providerClasses;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
/*
|
||||
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package li.strolch.rest;
|
||||
|
||||
/**
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
public class StrolchRestfulConstants {
|
||||
|
||||
public static final String STROLCH_CERTIFICATE = "strolch.certificate"; //$NON-NLS-1$
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
package li.strolch.rest;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.ext.ExceptionMapper;
|
||||
import javax.ws.rs.ext.Provider;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import ch.eitchnet.utils.helper.StringHelper;
|
||||
|
||||
@Provider
|
||||
public class StrolchRestfulExceptionMapper implements ExceptionMapper<Exception> {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(StrolchRestfulExceptionMapper.class);
|
||||
|
||||
@Override
|
||||
public Response toResponse(Exception ex) {
|
||||
logger.error(MessageFormat.format("Handling exception {0}", ex.getClass()), ex); //$NON-NLS-1$
|
||||
return Response.status(500).entity(StringHelper.formatException(ex)).type(MediaType.TEXT_PLAIN).build();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package li.strolch.rest;
|
||||
|
||||
import ch.eitchnet.privilege.model.Certificate;
|
||||
|
||||
/**
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
public interface StrolchSessionHandler {
|
||||
|
||||
public Certificate authenticate(String origin, String username, byte[] password);
|
||||
|
||||
public Certificate validate(String origin, String authToken);
|
||||
|
||||
public void invalidateSession(String origin, Certificate certificate);
|
||||
}
|
|
@ -0,0 +1,156 @@
|
|||
/*
|
||||
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package li.strolch.rest.endpoint;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.ws.rs.Consumes;
|
||||
import javax.ws.rs.DELETE;
|
||||
import javax.ws.rs.POST;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.PathParam;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.core.Context;
|
||||
import javax.ws.rs.core.GenericEntity;
|
||||
import javax.ws.rs.core.HttpHeaders;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.core.Response.Status;
|
||||
|
||||
import li.strolch.exception.StrolchException;
|
||||
import li.strolch.rest.RestfulStrolchComponent;
|
||||
import li.strolch.rest.StrolchSessionHandler;
|
||||
import li.strolch.rest.helper.RestfulHelper;
|
||||
import li.strolch.rest.model.Login;
|
||||
import li.strolch.rest.model.LoginResult;
|
||||
import li.strolch.rest.model.LogoutResult;
|
||||
import li.strolch.runtime.privilege.PrivilegeHandler;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import ch.eitchnet.privilege.base.PrivilegeException;
|
||||
import ch.eitchnet.privilege.model.Certificate;
|
||||
import ch.eitchnet.privilege.model.PrivilegeContext;
|
||||
import ch.eitchnet.utils.helper.StringHelper;
|
||||
|
||||
/**
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
@Path("strolch/authentication")
|
||||
public class AuthenticationService {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(AuthenticationService.class);
|
||||
|
||||
@POST
|
||||
@Consumes(MediaType.APPLICATION_JSON)
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public Response login(Login login, @Context HttpServletRequest request, @Context HttpHeaders headers) {
|
||||
|
||||
LoginResult loginResult = new LoginResult();
|
||||
GenericEntity<LoginResult> entity = new GenericEntity<LoginResult>(loginResult, LoginResult.class) {
|
||||
//
|
||||
};
|
||||
|
||||
try {
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
if (StringHelper.isEmpty(login.getUsername())) {
|
||||
sb.append("Username was not given. "); //$NON-NLS-1$
|
||||
}
|
||||
if (StringHelper.isEmpty(login.getPassword())) {
|
||||
sb.append("Password was not given."); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
if (sb.length() != 0) {
|
||||
loginResult.setMsg(MessageFormat.format("Could not log in due to: {0}", sb.toString())); //$NON-NLS-1$
|
||||
return Response.status(Status.UNAUTHORIZED).entity(loginResult).build();
|
||||
}
|
||||
|
||||
StrolchSessionHandler sessionHandler = RestfulStrolchComponent.getInstance().getComponent(
|
||||
StrolchSessionHandler.class);
|
||||
String origin = request == null ? "test" : request.getRemoteAddr(); //$NON-NLS-1$
|
||||
Certificate certificate = sessionHandler.authenticate(origin, login.getUsername(), login.getPassword()
|
||||
.getBytes());
|
||||
|
||||
Locale locale = RestfulHelper.getLocale(headers);
|
||||
certificate.setLocale(locale);
|
||||
|
||||
PrivilegeHandler privilegeHandler = RestfulStrolchComponent.getInstance().getPrivilegeHandler();
|
||||
PrivilegeContext privilegeContext = privilegeHandler.getPrivilegeContext(certificate);
|
||||
loginResult.setSessionId(certificate.getAuthToken());
|
||||
loginResult.setUsername(certificate.getUsername());
|
||||
loginResult.setLocale(locale.toString());
|
||||
loginResult.setParameters(certificate.getPropertyMap());
|
||||
|
||||
List<String> allowList = privilegeContext.getFlatAllowList();
|
||||
if (allowList.isEmpty())
|
||||
loginResult.setPrivileges(Arrays.asList("*")); //$NON-NLS-1$
|
||||
else
|
||||
loginResult.setPrivileges(allowList);
|
||||
|
||||
return Response.ok().entity(entity).build();
|
||||
|
||||
} catch (StrolchException e) {
|
||||
logger.error(e.getMessage(), e);
|
||||
loginResult.setMsg(MessageFormat.format("Could not log in due to: {0}", e.getMessage())); //$NON-NLS-1$
|
||||
return Response.status(Status.UNAUTHORIZED).entity(entity).build();
|
||||
} catch (Exception e) {
|
||||
logger.error(e.getMessage(), e);
|
||||
String msg = e.getMessage();
|
||||
loginResult.setMsg(MessageFormat.format("{0}: {1}", e.getClass().getName(), msg)); //$NON-NLS-1$
|
||||
return Response.serverError().entity(entity).build();
|
||||
}
|
||||
}
|
||||
|
||||
@DELETE
|
||||
@Consumes(MediaType.APPLICATION_JSON)
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
@Path("{authToken}")
|
||||
public Response logout(@PathParam("authToken") String authToken, @Context HttpServletRequest request) {
|
||||
|
||||
LogoutResult logoutResult = new LogoutResult();
|
||||
|
||||
GenericEntity<LogoutResult> entity = new GenericEntity<LogoutResult>(logoutResult, LogoutResult.class) {
|
||||
//
|
||||
};
|
||||
try {
|
||||
|
||||
StrolchSessionHandler sessionHandlerHandler = RestfulStrolchComponent.getInstance().getComponent(
|
||||
StrolchSessionHandler.class);
|
||||
String origin = request == null ? "test" : request.getRemoteAddr(); //$NON-NLS-1$
|
||||
Certificate certificate = sessionHandlerHandler.validate(origin, authToken);
|
||||
sessionHandlerHandler.invalidateSession(origin, certificate);
|
||||
|
||||
logoutResult.setMsg(MessageFormat.format("{0} has been logged out.", certificate.getUsername())); //$NON-NLS-1$
|
||||
return Response.ok().entity(entity).build();
|
||||
|
||||
} catch (StrolchException | PrivilegeException e) {
|
||||
logger.error(e.getMessage(), e);
|
||||
logoutResult.setMsg(MessageFormat.format("Could not logout due to: {0}", e.getMessage())); //$NON-NLS-1$
|
||||
return Response.status(Status.UNAUTHORIZED).entity(entity).build();
|
||||
} catch (Exception e) {
|
||||
logger.error(e.getMessage(), e);
|
||||
String msg = e.getMessage();
|
||||
logoutResult.setMsg(MessageFormat.format("{0}: {1}", e.getClass().getName(), msg)); //$NON-NLS-1$
|
||||
return Response.serverError().entity(entity).build();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,75 @@
|
|||
/*
|
||||
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package li.strolch.rest.endpoint;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.PathParam;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.core.Context;
|
||||
import javax.ws.rs.core.GenericEntity;
|
||||
import javax.ws.rs.core.HttpHeaders;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.Response;
|
||||
|
||||
import li.strolch.rest.RestfulStrolchComponent;
|
||||
import li.strolch.rest.StrolchRestfulConstants;
|
||||
import li.strolch.rest.helper.RestfulHelper;
|
||||
import li.strolch.runtime.query.enums.EnumHandler;
|
||||
import li.strolch.runtime.query.enums.StrolchEnum;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import ch.eitchnet.privilege.model.Certificate;
|
||||
|
||||
/**
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
@Path("strolch/enums")
|
||||
public class EnumQuery {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(EnumQuery.class);
|
||||
|
||||
@GET
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
@Path("{name}")
|
||||
public Response getEnum(@PathParam("name") String name, @Context HttpServletRequest request,
|
||||
@Context HttpHeaders headers) {
|
||||
|
||||
try {
|
||||
|
||||
EnumHandler enumHandler = RestfulStrolchComponent.getInstance().getContainer()
|
||||
.getComponent(EnumHandler.class);
|
||||
|
||||
Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE);
|
||||
Locale locale = RestfulHelper.getLocale(headers);
|
||||
StrolchEnum strolchEnum = enumHandler.getEnum(cert, name, locale);
|
||||
|
||||
GenericEntity<StrolchEnum> entity = new GenericEntity<StrolchEnum>(strolchEnum, StrolchEnum.class) {
|
||||
//
|
||||
};
|
||||
return Response.ok().entity(entity).build();
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error(e.getMessage(), e);
|
||||
return Response.serverError().entity(e.getMessage()).build();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,393 @@
|
|||
/*
|
||||
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package li.strolch.rest.endpoint;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.PathParam;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.core.Context;
|
||||
import javax.ws.rs.core.GenericEntity;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.Response;
|
||||
|
||||
import li.strolch.agent.api.ComponentContainer;
|
||||
import li.strolch.agent.api.OrderMap;
|
||||
import li.strolch.agent.api.ResourceMap;
|
||||
import li.strolch.exception.StrolchException;
|
||||
import li.strolch.model.Order;
|
||||
import li.strolch.model.Resource;
|
||||
import li.strolch.persistence.api.StrolchTransaction;
|
||||
import li.strolch.rest.RestfulStrolchComponent;
|
||||
import li.strolch.rest.StrolchRestfulConstants;
|
||||
import li.strolch.rest.model.AgentOverview;
|
||||
import li.strolch.rest.model.ElementMapOverview;
|
||||
import li.strolch.rest.model.ElementMapType;
|
||||
import li.strolch.rest.model.ElementMapsOverview;
|
||||
import li.strolch.rest.model.OrderDetail;
|
||||
import li.strolch.rest.model.OrderOverview;
|
||||
import li.strolch.rest.model.RealmDetail;
|
||||
import li.strolch.rest.model.RealmOverview;
|
||||
import li.strolch.rest.model.ResourceDetail;
|
||||
import li.strolch.rest.model.ResourceOverview;
|
||||
import li.strolch.rest.model.StrolchElementOverview;
|
||||
import li.strolch.rest.model.TypeDetail;
|
||||
import li.strolch.rest.model.TypeOverview;
|
||||
import ch.eitchnet.privilege.model.Certificate;
|
||||
|
||||
/**
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
@Path("strolch/inspector")
|
||||
public class Inspector {
|
||||
|
||||
private StrolchTransaction openTx(Certificate certificate, String realm) {
|
||||
return RestfulStrolchComponent.getInstance().getContainer().getRealm(realm)
|
||||
.openTx(certificate, Inspector.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Root path of the inspector
|
||||
* </p>
|
||||
*
|
||||
* <p>
|
||||
* Returns the root element, which is an overview of the configured realms
|
||||
* </p>
|
||||
*
|
||||
* @return the root element, which is an overview of the configured realms
|
||||
*
|
||||
* @see AgentOverview
|
||||
*/
|
||||
@GET
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public Response getAgent(@Context HttpServletRequest request) {
|
||||
try {
|
||||
ComponentContainer container = RestfulStrolchComponent.getInstance().getContainer();
|
||||
Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE);
|
||||
|
||||
Set<String> realmNames = container.getRealmNames();
|
||||
List<RealmOverview> realmOverviews = new ArrayList<>(realmNames.size());
|
||||
for (String realmName : realmNames) {
|
||||
|
||||
try (StrolchTransaction tx = openTx(cert, realmName)) {
|
||||
long size = 0;
|
||||
size += tx.getResourceMap().querySize(tx);
|
||||
size += tx.getOrderMap().querySize(tx);
|
||||
RealmOverview realmOverview = new RealmOverview(realmName, size);
|
||||
realmOverviews.add(realmOverview);
|
||||
}
|
||||
}
|
||||
|
||||
AgentOverview agentOverview = new AgentOverview(realmOverviews);
|
||||
GenericEntity<AgentOverview> entity = new GenericEntity<AgentOverview>(agentOverview, AgentOverview.class) {
|
||||
//
|
||||
};
|
||||
return Response.ok().entity(entity).build();
|
||||
} catch (Exception e) {
|
||||
//e.printStackTrace();
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Realm inspector
|
||||
* </p>
|
||||
*
|
||||
* <p>
|
||||
* Returns the overview of a specific relam
|
||||
* </p>
|
||||
*
|
||||
* @param realm
|
||||
* the realm for which the overview is to be returned
|
||||
*
|
||||
* @return the overview of a specific relam
|
||||
*
|
||||
* @see RealmDetail
|
||||
*/
|
||||
@GET
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
@Path("{realm}")
|
||||
public Response getRealm(@PathParam("realm") String realm, @Context HttpServletRequest request) {
|
||||
Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE);
|
||||
|
||||
List<ElementMapsOverview> elementMapOverviews = new ArrayList<>(2);
|
||||
try (StrolchTransaction tx = openTx(cert, realm)) {
|
||||
|
||||
ResourceMap resourceMap = tx.getResourceMap();
|
||||
ElementMapsOverview resourceOverview = new ElementMapsOverview(ElementMapType.RESOURCE);
|
||||
resourceOverview.setNrOfElements(resourceMap.querySize(tx));
|
||||
resourceOverview.setTypes(resourceMap.getTypes(tx));
|
||||
elementMapOverviews.add(resourceOverview);
|
||||
|
||||
OrderMap orderMap = tx.getOrderMap();
|
||||
ElementMapsOverview orderOverview = new ElementMapsOverview(ElementMapType.ORDER);
|
||||
orderOverview.setNrOfElements(orderMap.querySize(tx));
|
||||
orderOverview.setTypes(orderMap.getTypes(tx));
|
||||
elementMapOverviews.add(orderOverview);
|
||||
}
|
||||
|
||||
RealmDetail modelOverview = new RealmDetail(elementMapOverviews);
|
||||
GenericEntity<RealmDetail> entity = new GenericEntity<RealmDetail>(modelOverview, RealmDetail.class) {
|
||||
//
|
||||
};
|
||||
return Response.ok().entity(entity).build();
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Resource inspector
|
||||
* </p>
|
||||
* <p>
|
||||
* Returns an overview of the {@link Resource Resources}. This is a list of all the types and the size each type has
|
||||
* </p>
|
||||
*
|
||||
* @param realm
|
||||
* the realm for which the resource overview is to be returned
|
||||
*
|
||||
* @return an overview of the {@link Resource Resources}. This is a list of all the types and the size each type has
|
||||
*
|
||||
* @see ElementMapOverview
|
||||
*/
|
||||
@GET
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
@Path("{realm}/resource")
|
||||
public Response getResourcesOverview(@PathParam("realm") String realm, @Context HttpServletRequest request) {
|
||||
Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE);
|
||||
|
||||
ElementMapOverview resourcesOverview;
|
||||
try (StrolchTransaction tx = openTx(cert, realm)) {
|
||||
ResourceMap resourceMap = tx.getResourceMap();
|
||||
List<String> types = new ArrayList<>(resourceMap.getTypes(tx));
|
||||
Collections.sort(types);
|
||||
List<TypeOverview> typeOverviews = new ArrayList<>(types.size());
|
||||
for (String type : types) {
|
||||
long size = resourceMap.querySize(tx, type);
|
||||
TypeOverview typeOverview = new TypeOverview(type, size);
|
||||
typeOverviews.add(typeOverview);
|
||||
}
|
||||
|
||||
resourcesOverview = new ElementMapOverview(ElementMapType.RESOURCE.getName(), typeOverviews);
|
||||
}
|
||||
|
||||
GenericEntity<ElementMapOverview> entity = new GenericEntity<ElementMapOverview>(resourcesOverview,
|
||||
ElementMapOverview.class) {
|
||||
//
|
||||
};
|
||||
return Response.ok().entity(entity).build();
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Order inspector
|
||||
* </p>
|
||||
* <p>
|
||||
* Returns an overview of the {@link Order Orders}. This is a list of all the types and the size each type has
|
||||
* </p>
|
||||
*
|
||||
* @param realm
|
||||
* the realm for which the order overview is to be returned
|
||||
*
|
||||
* @return an overview of the {@link Order Orders}. This is a list of all the types and the size each type has
|
||||
*
|
||||
* @see ElementMapOverview
|
||||
*/
|
||||
@GET
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
@Path("{realm}/order")
|
||||
public Response getOrdersOverview(@PathParam("realm") String realm, @Context HttpServletRequest request) {
|
||||
Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE);
|
||||
|
||||
ElementMapOverview ordersOverview;
|
||||
try (StrolchTransaction tx = openTx(cert, realm)) {
|
||||
OrderMap orderMap = tx.getOrderMap();
|
||||
List<String> types = new ArrayList<>(orderMap.getTypes(tx));
|
||||
Collections.sort(types);
|
||||
List<TypeOverview> typeOverviews = new ArrayList<>(types.size());
|
||||
for (String type : types) {
|
||||
long size = orderMap.querySize(tx, type);
|
||||
TypeOverview typeOverview = new TypeOverview(type, size);
|
||||
typeOverviews.add(typeOverview);
|
||||
}
|
||||
|
||||
ordersOverview = new ElementMapOverview(ElementMapType.ORDER.getName(), typeOverviews);
|
||||
}
|
||||
|
||||
GenericEntity<ElementMapOverview> entity = new GenericEntity<ElementMapOverview>(ordersOverview,
|
||||
ElementMapOverview.class) {
|
||||
//
|
||||
};
|
||||
return Response.ok().entity(entity).build();
|
||||
}
|
||||
|
||||
// TODO for the get element type details, we should not simply query all objects, but rather find a solution to query only the id, name, type and date, state for the order
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Resource type inspector
|
||||
* </p>
|
||||
* <p>
|
||||
* Returns an overview of the {@link Resource Resources} with the given type. This is a list of overviews of the
|
||||
* resources
|
||||
* </p>
|
||||
*
|
||||
* @param realm
|
||||
* the realm for which the resource type overview is to be returned
|
||||
* @param type
|
||||
*
|
||||
* @return an overview of the {@link Resource Resources} with the given type. This is a list of overviews of the
|
||||
* resources
|
||||
*
|
||||
* @see TypeDetail
|
||||
* @see StrolchElementOverview
|
||||
*/
|
||||
@GET
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
@Path("{realm}/resource/{type}")
|
||||
public Response getResourceTypeDetails(@PathParam("realm") String realm, @PathParam("type") String type,
|
||||
@Context HttpServletRequest request) {
|
||||
Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE);
|
||||
|
||||
TypeDetail typeDetail;
|
||||
try (StrolchTransaction tx = openTx(cert, realm)) {
|
||||
List<Resource> byType = tx.getResourceMap().getElementsBy(tx, type);
|
||||
List<StrolchElementOverview> elementOverviews = new ArrayList<>(byType.size());
|
||||
for (Resource resource : byType) {
|
||||
ResourceOverview resourceOverview = new ResourceOverview(resource);
|
||||
elementOverviews.add(resourceOverview);
|
||||
}
|
||||
typeDetail = new TypeDetail(type, elementOverviews);
|
||||
}
|
||||
|
||||
GenericEntity<TypeDetail> entity = new GenericEntity<TypeDetail>(typeDetail, TypeDetail.class) {
|
||||
//
|
||||
};
|
||||
return Response.ok().entity(entity).build();
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Order type inspector
|
||||
* </p>
|
||||
* <p>
|
||||
* Returns an overview of the {@link Order Orders} with the given type. This is a list of overviews of the orders
|
||||
* </p>
|
||||
*
|
||||
* @param realm
|
||||
* the realm for which the order type overview is to be returned
|
||||
* @param type
|
||||
*
|
||||
* @return an overview of the {@link Order Orders} with the given type. This is a list of overviews of the orders
|
||||
*
|
||||
* @see TypeDetail
|
||||
* @see StrolchElementOverview
|
||||
*/
|
||||
@GET
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
@Path("{realm}/order/{type}")
|
||||
public Response getOrderTypeDetails(@PathParam("realm") String realm, @PathParam("type") String type,
|
||||
@Context HttpServletRequest request) {
|
||||
Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE);
|
||||
|
||||
TypeDetail typeDetail;
|
||||
try (StrolchTransaction tx = openTx(cert, realm)) {
|
||||
List<Order> byType = tx.getOrderMap().getElementsBy(tx, type);
|
||||
List<StrolchElementOverview> elementOverviews = new ArrayList<>(byType.size());
|
||||
for (Order order : byType) {
|
||||
OrderOverview orderOverview = new OrderOverview(order);
|
||||
elementOverviews.add(orderOverview);
|
||||
}
|
||||
typeDetail = new TypeDetail(type, elementOverviews);
|
||||
}
|
||||
|
||||
GenericEntity<TypeDetail> entity = new GenericEntity<TypeDetail>(typeDetail, TypeDetail.class) {
|
||||
//
|
||||
};
|
||||
return Response.ok().entity(entity).build();
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Resource inspector
|
||||
* </p>
|
||||
*
|
||||
* <p>
|
||||
* Returns the resource with the given id
|
||||
* </p>
|
||||
*
|
||||
* @param realm
|
||||
* the realm for which the resource is to be returned
|
||||
* @param type
|
||||
* the type of the resource
|
||||
* @param id
|
||||
* the id of the resource
|
||||
*
|
||||
* @return the resource with the given id
|
||||
*
|
||||
* @see ResourceDetail
|
||||
*/
|
||||
@GET
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
@Path("{realm}/resource/{type}/{id}")
|
||||
public Response getResource(@PathParam("realm") String realm, @PathParam("type") String type,
|
||||
@PathParam("id") String id, @Context HttpServletRequest request) {
|
||||
Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE);
|
||||
|
||||
Resource resource;
|
||||
try (StrolchTransaction tx = openTx(cert, realm)) {
|
||||
resource = tx.getResourceMap().getBy(tx, type, id);
|
||||
}
|
||||
if (resource == null) {
|
||||
throw new StrolchException(MessageFormat.format("No Resource exists for {0}/{1}", type, id)); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
ResourceDetail resourceDetail = new ResourceDetail(resource);
|
||||
GenericEntity<ResourceDetail> entity = new GenericEntity<ResourceDetail>(resourceDetail, ResourceDetail.class) {
|
||||
//
|
||||
};
|
||||
return Response.ok().entity(entity).build();
|
||||
}
|
||||
|
||||
@GET
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
@Path("{realm}/order/{type}/{id}")
|
||||
public Response getOrder(@PathParam("realm") String realm, @PathParam("type") String type,
|
||||
@PathParam("id") String id, @Context HttpServletRequest request) {
|
||||
Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE);
|
||||
|
||||
Order order;
|
||||
try (StrolchTransaction tx = openTx(cert, realm)) {
|
||||
order = tx.getOrderMap().getBy(tx, type, id);
|
||||
}
|
||||
if (order == null) {
|
||||
throw new StrolchException(MessageFormat.format("No Order exists for {0}/{1}", type, id)); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
OrderDetail orderDetail = new OrderDetail(order);
|
||||
GenericEntity<OrderDetail> entity = new GenericEntity<OrderDetail>(orderDetail, OrderDetail.class) {
|
||||
//
|
||||
};
|
||||
return Response.ok().entity(entity).build();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,55 @@
|
|||
/*
|
||||
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package li.strolch.rest.endpoint;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.core.Context;
|
||||
import javax.ws.rs.core.GenericEntity;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.Response;
|
||||
|
||||
import li.strolch.agent.api.ComponentContainer;
|
||||
import li.strolch.agent.api.VersionQueryResult;
|
||||
import li.strolch.rest.RestfulStrolchComponent;
|
||||
import li.strolch.rest.StrolchRestfulConstants;
|
||||
import ch.eitchnet.privilege.model.Certificate;
|
||||
|
||||
/**
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
@Path("strolch/version")
|
||||
public class VersionQuery {
|
||||
|
||||
@GET
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public Response getVersions(@Context HttpServletRequest request) {
|
||||
|
||||
ComponentContainer container = RestfulStrolchComponent.getInstance().getContainer();
|
||||
|
||||
Certificate cert = (Certificate) request.getAttribute(StrolchRestfulConstants.STROLCH_CERTIFICATE);
|
||||
container.getPrivilegeHandler().isCertificateValid(cert);
|
||||
|
||||
VersionQueryResult versionQueryResult = container.getAgent().getVersion();
|
||||
GenericEntity<VersionQueryResult> entity = new GenericEntity<VersionQueryResult>(versionQueryResult,
|
||||
VersionQueryResult.class) {
|
||||
//
|
||||
};
|
||||
return Response.ok().entity(entity).build();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,70 @@
|
|||
package li.strolch.rest.filters;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.text.MessageFormat;
|
||||
|
||||
import javax.annotation.Priority;
|
||||
import javax.ws.rs.Priorities;
|
||||
import javax.ws.rs.container.ContainerRequestContext;
|
||||
import javax.ws.rs.container.ContainerResponseContext;
|
||||
import javax.ws.rs.container.ContainerResponseFilter;
|
||||
import javax.ws.rs.core.MultivaluedMap;
|
||||
import javax.ws.rs.ext.Provider;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@Provider
|
||||
@Priority(Priorities.HEADER_DECORATOR)
|
||||
public class AccessControlResponseFilter implements ContainerResponseFilter {
|
||||
|
||||
private static final String ACCESS_CONTROL_ALLOW_METHODS = "Access-Control-Allow-Methods"; //$NON-NLS-1$
|
||||
private static final String ACCESS_CONTROL_EXPOSE_HEADERS = "Access-Control-Expose-Headers"; //$NON-NLS-1$
|
||||
private static final String ACCESS_CONTROL_ALLOW_HEADERS = "Access-Control-Allow-Headers"; //$NON-NLS-1$
|
||||
private static final String ACCESS_CONTROL_ALLOW_ORIGIN = "Access-Control-Allow-Origin"; //$NON-NLS-1$
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(AccessControlResponseFilter.class);
|
||||
|
||||
private static boolean corsEnabled;
|
||||
private static String origin;
|
||||
private static boolean logged;
|
||||
|
||||
/**
|
||||
* @param corsEnabled
|
||||
* the corsEnabled to set
|
||||
*/
|
||||
public static void setCorsEnabled(boolean corsEnabled) {
|
||||
AccessControlResponseFilter.corsEnabled = corsEnabled;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param origin
|
||||
* the origin to set
|
||||
*/
|
||||
public static void setOrigin(String origin) {
|
||||
AccessControlResponseFilter.origin = origin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
|
||||
throws IOException {
|
||||
|
||||
if (!corsEnabled)
|
||||
return;
|
||||
|
||||
if (!logged) {
|
||||
logged = true;
|
||||
logger.info(MessageFormat.format("Enabling CORS for origin: {0}", origin)); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
MultivaluedMap<String, Object> headers = responseContext.getHeaders();
|
||||
|
||||
// allow for the configured origin
|
||||
headers.add(ACCESS_CONTROL_ALLOW_ORIGIN, origin);
|
||||
|
||||
// and set the allowed HTTP headers and methods
|
||||
headers.add(ACCESS_CONTROL_ALLOW_HEADERS, "Authorization, Origin, X-Requested-With, Content-Type"); //$NON-NLS-1$
|
||||
headers.add(ACCESS_CONTROL_EXPOSE_HEADERS, "Location, Content-Disposition"); //$NON-NLS-1$
|
||||
headers.add(ACCESS_CONTROL_ALLOW_METHODS, "POST, PUT, GET, DELETE, HEAD, OPTIONS"); //$NON-NLS-1$
|
||||
}
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
/**
|
||||
*
|
||||
*/
|
||||
package li.strolch.rest.filters;
|
||||
|
||||
import static li.strolch.rest.StrolchRestfulConstants.STROLCH_CERTIFICATE;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.ws.rs.container.ContainerRequestContext;
|
||||
import javax.ws.rs.container.ContainerRequestFilter;
|
||||
import javax.ws.rs.core.Context;
|
||||
import javax.ws.rs.core.HttpHeaders;
|
||||
import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.ext.Provider;
|
||||
|
||||
import li.strolch.rest.RestfulStrolchComponent;
|
||||
import li.strolch.rest.StrolchSessionHandler;
|
||||
import ch.eitchnet.privilege.model.Certificate;
|
||||
|
||||
/**
|
||||
* @author Reto Breitenmoser <reto.breitenmoser@4trees.ch>
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
@Provider
|
||||
public class AuthenicationRequestFilter implements ContainerRequestFilter {
|
||||
|
||||
@Context
|
||||
HttpServletRequest request;
|
||||
|
||||
@Override
|
||||
public void filter(ContainerRequestContext requestContext) throws IOException {
|
||||
String sessionId = requestContext.getHeaderString(HttpHeaders.AUTHORIZATION);
|
||||
if (sessionId != null) {
|
||||
try {
|
||||
String origin = this.request == null ? "test" : this.request.getRemoteAddr(); //$NON-NLS-1$
|
||||
StrolchSessionHandler sessionHandler = RestfulStrolchComponent.getInstance().getComponent(
|
||||
StrolchSessionHandler.class);
|
||||
Certificate certificate = sessionHandler.validate(origin, sessionId);
|
||||
requestContext.setProperty(STROLCH_CERTIFICATE, certificate);
|
||||
} catch (Exception e) {
|
||||
requestContext.abortWith(Response.status(Response.Status.UNAUTHORIZED)
|
||||
.entity("User cannot access the resource.").build()); //$NON-NLS-1$
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
/**
|
||||
*
|
||||
*/
|
||||
package li.strolch.rest.filters;
|
||||
|
||||
import static li.strolch.rest.StrolchRestfulConstants.STROLCH_CERTIFICATE;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import javax.ws.rs.container.ContainerRequestContext;
|
||||
import javax.ws.rs.container.ContainerResponseContext;
|
||||
import javax.ws.rs.container.ContainerResponseFilter;
|
||||
import javax.ws.rs.core.HttpHeaders;
|
||||
import javax.ws.rs.ext.Provider;
|
||||
|
||||
import ch.eitchnet.privilege.model.Certificate;
|
||||
|
||||
/**
|
||||
* @author Reto Breitenmoser <reto.breitenmoser@4trees.ch>
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
@Provider
|
||||
public class AuthenicationResponseFilter implements ContainerResponseFilter {
|
||||
|
||||
@Override
|
||||
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
|
||||
throws IOException {
|
||||
|
||||
Certificate cert = (Certificate) requestContext.getProperty(STROLCH_CERTIFICATE);
|
||||
if (cert != null) {
|
||||
responseContext.getHeaders().add(HttpHeaders.AUTHORIZATION, cert.getAuthToken());
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
package li.strolch.rest.filters;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import javax.ws.rs.container.ContainerRequestContext;
|
||||
import javax.ws.rs.container.ContainerResponseContext;
|
||||
import javax.ws.rs.container.ContainerResponseFilter;
|
||||
import javax.ws.rs.core.HttpHeaders;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.ext.Provider;
|
||||
|
||||
/**
|
||||
* The JSON generated is not in the same charset as the rest of the response, thus we override it to UTF-8 with this
|
||||
* response filter
|
||||
*
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
@Provider
|
||||
public class CharsetResponseFilter implements ContainerResponseFilter {
|
||||
|
||||
private static final String UTF_8 = "utf-8"; //$NON-NLS-1$
|
||||
|
||||
@Override
|
||||
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
|
||||
throws IOException {
|
||||
|
||||
MediaType contentType = responseContext.getMediaType();
|
||||
if (contentType != null) {
|
||||
String charset = contentType.getParameters().get(MediaType.CHARSET_PARAMETER);
|
||||
if (charset == null || !charset.equalsIgnoreCase(UTF_8)) {
|
||||
contentType = contentType.withCharset(UTF_8);
|
||||
responseContext.getHeaders().putSingle(HttpHeaders.CONTENT_TYPE, contentType.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
/*
|
||||
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package li.strolch.rest.helper;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
import javax.ws.rs.core.HttpHeaders;
|
||||
|
||||
import ch.eitchnet.utils.helper.StringHelper;
|
||||
|
||||
/**
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
public class RestfulHelper {
|
||||
|
||||
public static Locale getLocale(HttpHeaders headers) {
|
||||
Locale locale;
|
||||
if (headers == null || StringHelper.isEmpty(headers.getHeaderString(HttpHeaders.ACCEPT_LANGUAGE)))
|
||||
locale = Locale.getDefault();
|
||||
else
|
||||
locale = headers.getAcceptableLanguages().get(0);
|
||||
|
||||
return locale;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,88 @@
|
|||
/*
|
||||
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package li.strolch.rest.model;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.util.List;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
/**
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
@XmlAccessorType(XmlAccessType.NONE)
|
||||
@XmlRootElement(name = "Agent")
|
||||
public class AgentOverview {
|
||||
|
||||
@XmlElement(name = "realms")
|
||||
private List<RealmOverview> realms;
|
||||
|
||||
public AgentOverview() {
|
||||
// no-arg constructor for JAXB
|
||||
}
|
||||
|
||||
public AgentOverview(List<RealmOverview> realms) {
|
||||
this.realms = realms;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the realms
|
||||
*/
|
||||
public List<RealmOverview> getRealms() {
|
||||
return this.realms;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param realms
|
||||
* the realms to set
|
||||
*/
|
||||
public void setRealms(List<RealmOverview> realms) {
|
||||
this.realms = realms;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + ((this.realms == null) ? 0 : this.realms.hashCode());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj)
|
||||
return true;
|
||||
if (obj == null)
|
||||
return false;
|
||||
if (getClass() != obj.getClass())
|
||||
return false;
|
||||
AgentOverview other = (AgentOverview) obj;
|
||||
if (this.realms == null) {
|
||||
if (other.realms != null)
|
||||
return false;
|
||||
} else if (!this.realms.equals(other.realms))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return MessageFormat.format("AgentOverview [realms={0}]", this.realms); //$NON-NLS-1$
|
||||
}
|
||||
}
|
|
@ -0,0 +1,140 @@
|
|||
/*
|
||||
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package li.strolch.rest.model;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
import java.util.List;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlAttribute;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
/**
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
@XmlAccessorType(XmlAccessType.NONE)
|
||||
@XmlRootElement(name = "ElementMap")
|
||||
public class ElementMapOverview {
|
||||
|
||||
@XmlAttribute(name = "elementMapName")
|
||||
private String elementMapName;
|
||||
@XmlAttribute(name = "size")
|
||||
private long size;
|
||||
@XmlElement(name = "types", type = TypeOverview.class)
|
||||
private List<TypeOverview> typeOverviews;
|
||||
|
||||
public ElementMapOverview() {
|
||||
// no-arg constructor for JAXB
|
||||
}
|
||||
|
||||
/**
|
||||
* @param elementMapName
|
||||
* @param typeOverviews
|
||||
*/
|
||||
public ElementMapOverview(String elementMapName, List<TypeOverview> typeOverviews) {
|
||||
this.elementMapName = elementMapName;
|
||||
this.typeOverviews = typeOverviews;
|
||||
this.size = this.typeOverviews.size();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the elementMapName
|
||||
*/
|
||||
public String getElementMapName() {
|
||||
return this.elementMapName;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param elementMapName
|
||||
* the elementMapName to set
|
||||
*/
|
||||
public void setElementMapName(String elementMapName) {
|
||||
this.elementMapName = elementMapName;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the size
|
||||
*/
|
||||
public long getSize() {
|
||||
return this.size;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param size
|
||||
* the size to set
|
||||
*/
|
||||
public void setSize(long size) {
|
||||
this.size = size;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the typeOverviews
|
||||
*/
|
||||
public List<TypeOverview> getTypeOverviews() {
|
||||
return this.typeOverviews;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param typeOverviews
|
||||
* the typeOverviews to set
|
||||
*/
|
||||
public void setTypeOverviews(List<TypeOverview> typeOverviews) {
|
||||
this.typeOverviews = typeOverviews;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + ((this.elementMapName == null) ? 0 : this.elementMapName.hashCode());
|
||||
result = prime * result + (int) (this.size ^ (this.size >>> 32));
|
||||
result = prime * result + ((this.typeOverviews == null) ? 0 : this.typeOverviews.hashCode());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj)
|
||||
return true;
|
||||
if (obj == null)
|
||||
return false;
|
||||
if (getClass() != obj.getClass())
|
||||
return false;
|
||||
ElementMapOverview other = (ElementMapOverview) obj;
|
||||
if (this.elementMapName == null) {
|
||||
if (other.elementMapName != null)
|
||||
return false;
|
||||
} else if (!this.elementMapName.equals(other.elementMapName))
|
||||
return false;
|
||||
if (this.size != other.size)
|
||||
return false;
|
||||
if (this.typeOverviews == null) {
|
||||
if (other.typeOverviews != null)
|
||||
return false;
|
||||
} else if (!this.typeOverviews.equals(other.typeOverviews))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return MessageFormat.format(
|
||||
"ElementMapOverview [elementMapName={0}, size={1}, typeOverviews={2}]", this.elementMapName, //$NON-NLS-1$
|
||||
this.size, this.typeOverviews);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
/*
|
||||
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package li.strolch.rest.model;
|
||||
|
||||
import li.strolch.model.Tags;
|
||||
|
||||
/**
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
public enum ElementMapType {
|
||||
RESOURCE(Tags.RESOURCE), ORDER(Tags.ORDER);
|
||||
private String name;
|
||||
|
||||
private ElementMapType(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the name
|
||||
*/
|
||||
public String getName() {
|
||||
return this.name;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,181 @@
|
|||
/*
|
||||
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package li.strolch.rest.model;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlAttribute;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
/**
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
@XmlAccessorType(XmlAccessType.NONE)
|
||||
@XmlRootElement(name = "ElementMaps")
|
||||
public class ElementMapsOverview {
|
||||
|
||||
@XmlAttribute(name = "name")
|
||||
private String name;
|
||||
|
||||
@XmlAttribute(name = "elementMapType")
|
||||
private ElementMapType elementMapType;
|
||||
|
||||
@XmlAttribute(name = "nrOfElements")
|
||||
private long nrOfElements;
|
||||
|
||||
@XmlElement(name = "types")
|
||||
private Set<String> types;
|
||||
|
||||
public ElementMapsOverview() {
|
||||
// no-arg constructor for JAXB
|
||||
}
|
||||
|
||||
/**
|
||||
* @param elementMapType
|
||||
*/
|
||||
public ElementMapsOverview(ElementMapType elementMapType) {
|
||||
this.elementMapType = elementMapType;
|
||||
this.name = elementMapType.getName();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param elementMapType
|
||||
* @param nrOfElements
|
||||
* @param types
|
||||
*/
|
||||
public ElementMapsOverview(ElementMapType elementMapType, long nrOfElements, Set<String> types) {
|
||||
this(elementMapType);
|
||||
this.nrOfElements = nrOfElements;
|
||||
this.types = types;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the name
|
||||
*/
|
||||
public String getName() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param name
|
||||
* the name to set
|
||||
*/
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the elementMapType
|
||||
*/
|
||||
public ElementMapType getElementMapType() {
|
||||
return this.elementMapType;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param elementMapType
|
||||
* the elementMapType to set
|
||||
*/
|
||||
public void setElementMapType(ElementMapType elementMapType) {
|
||||
this.elementMapType = elementMapType;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the types
|
||||
*/
|
||||
public Set<String> getTypes() {
|
||||
return this.types;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param types
|
||||
* the types to set
|
||||
*/
|
||||
public void setTypes(Set<String> types) {
|
||||
this.types = types;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the nrOfElements
|
||||
*/
|
||||
public long getNrOfElements() {
|
||||
return this.nrOfElements;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param nrOfElements
|
||||
* the nrOfElements to set
|
||||
*/
|
||||
public void setNrOfElements(long nrOfElements) {
|
||||
this.nrOfElements = nrOfElements;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + ((this.elementMapType == null) ? 0 : this.elementMapType.hashCode());
|
||||
result = prime * result + ((this.name == null) ? 0 : this.name.hashCode());
|
||||
result = prime * result + (int) (this.nrOfElements ^ (this.nrOfElements >>> 32));
|
||||
result = prime * result + ((this.types == null) ? 0 : this.types.hashCode());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj)
|
||||
return true;
|
||||
if (obj == null)
|
||||
return false;
|
||||
if (getClass() != obj.getClass())
|
||||
return false;
|
||||
ElementMapsOverview other = (ElementMapsOverview) obj;
|
||||
if (this.elementMapType != other.elementMapType)
|
||||
return false;
|
||||
if (this.name == null) {
|
||||
if (other.name != null)
|
||||
return false;
|
||||
} else if (!this.name.equals(other.name))
|
||||
return false;
|
||||
if (this.nrOfElements != other.nrOfElements)
|
||||
return false;
|
||||
if (this.types == null) {
|
||||
if (other.types != null)
|
||||
return false;
|
||||
} else if (!this.types.equals(other.types))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@SuppressWarnings("nls")
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("ElementMapsOverview [name=");
|
||||
sb.append(this.name);
|
||||
sb.append(", elementMapType=");
|
||||
sb.append(this.elementMapType);
|
||||
sb.append(", nrOfElements=");
|
||||
sb.append(this.nrOfElements);
|
||||
sb.append(", types=");
|
||||
sb.append(this.types);
|
||||
sb.append("]");
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,102 @@
|
|||
/*
|
||||
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package li.strolch.rest.model;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
import javax.xml.bind.annotation.XmlSeeAlso;
|
||||
|
||||
import li.strolch.model.GroupedParameterizedElement;
|
||||
import li.strolch.model.ParameterBag;
|
||||
|
||||
/**
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
@XmlAccessorType(XmlAccessType.NONE)
|
||||
@XmlRootElement(name = "GroupedParameterizedElement")
|
||||
@XmlSeeAlso({ ResourceDetail.class, OrderDetail.class })
|
||||
public class GroupedParameterizedElementDetail extends StrolchElementDetail {
|
||||
|
||||
@XmlElement(name = "parameterBags", type = ParameterizedElementDetail.class)
|
||||
private List<ParameterizedElementDetail> parameterizedElements;
|
||||
|
||||
public GroupedParameterizedElementDetail() {
|
||||
// no-arg constructor for JAXB
|
||||
}
|
||||
|
||||
public GroupedParameterizedElementDetail(String id, String name, String type,
|
||||
List<ParameterizedElementDetail> parameterizedElements) {
|
||||
super(id, name, type);
|
||||
this.parameterizedElements = parameterizedElements;
|
||||
}
|
||||
|
||||
public GroupedParameterizedElementDetail(GroupedParameterizedElement groupedParameterizedElement) {
|
||||
super(groupedParameterizedElement);
|
||||
|
||||
Set<String> bagKeySet = groupedParameterizedElement.getParameterBagKeySet();
|
||||
this.parameterizedElements = new ArrayList<>(bagKeySet.size());
|
||||
for (String bagId : bagKeySet) {
|
||||
ParameterBag parameterBag = groupedParameterizedElement.getParameterBag(bagId);
|
||||
this.parameterizedElements.add(new ParameterizedElementDetail(parameterBag));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the parameterizedElements
|
||||
*/
|
||||
public List<ParameterizedElementDetail> getParameterizedElements() {
|
||||
return this.parameterizedElements;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param parameterizedElements
|
||||
* the parameterizedElements to set
|
||||
*/
|
||||
public void setParameterizedElements(List<ParameterizedElementDetail> parameterizedElements) {
|
||||
this.parameterizedElements = parameterizedElements;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
int result = super.hashCode();
|
||||
result = prime * result + ((this.parameterizedElements == null) ? 0 : this.parameterizedElements.hashCode());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj)
|
||||
return true;
|
||||
if (!super.equals(obj))
|
||||
return false;
|
||||
if (getClass() != obj.getClass())
|
||||
return false;
|
||||
GroupedParameterizedElementDetail other = (GroupedParameterizedElementDetail) obj;
|
||||
if (this.parameterizedElements == null) {
|
||||
if (other.parameterizedElements != null)
|
||||
return false;
|
||||
} else if (!this.parameterizedElements.equals(other.parameterizedElements))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,68 @@
|
|||
/*
|
||||
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package li.strolch.rest.model;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlAttribute;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
/**
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
@XmlAccessorType(XmlAccessType.NONE)
|
||||
@XmlRootElement(name = "Login")
|
||||
public class Login {
|
||||
|
||||
@XmlAttribute
|
||||
private String username;
|
||||
@XmlAttribute
|
||||
private String password;
|
||||
|
||||
public Login() {
|
||||
// no-arg constructor for JAXB
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the username
|
||||
*/
|
||||
public String getUsername() {
|
||||
return this.username;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param username
|
||||
* the username to set
|
||||
*/
|
||||
public void setUsername(String username) {
|
||||
this.username = username;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the password
|
||||
*/
|
||||
public String getPassword() {
|
||||
return this.password;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param password
|
||||
* the password to set
|
||||
*/
|
||||
public void setPassword(String password) {
|
||||
this.password = password;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,153 @@
|
|||
/*
|
||||
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package li.strolch.rest.model;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlAttribute;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
/**
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
@XmlAccessorType(XmlAccessType.NONE)
|
||||
@XmlRootElement(name = "LoginResult")
|
||||
public class LoginResult {
|
||||
|
||||
@XmlAttribute(name = "username")
|
||||
private String username;
|
||||
|
||||
@XmlAttribute(name = "sessionId")
|
||||
private String sessionId;
|
||||
|
||||
@XmlAttribute(name = "locale")
|
||||
private String locale;
|
||||
|
||||
@XmlAttribute(name = "parameters")
|
||||
private Map<String, String> parameters;
|
||||
|
||||
@XmlAttribute(name = "msg")
|
||||
private String msg;
|
||||
|
||||
@XmlAttribute(name = "privileges")
|
||||
private List<String> privileges;
|
||||
|
||||
public LoginResult() {
|
||||
// no-arg constructor for JAXB
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the username
|
||||
*/
|
||||
public String getUsername() {
|
||||
return this.username;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param username
|
||||
* the username to set
|
||||
*/
|
||||
public void setUsername(String username) {
|
||||
this.username = username;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the sessionId
|
||||
*/
|
||||
public String getSessionId() {
|
||||
return this.sessionId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param sessionId
|
||||
* the sessionId to set
|
||||
*/
|
||||
public void setSessionId(String sessionId) {
|
||||
this.sessionId = sessionId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the locale
|
||||
*/
|
||||
public String getLocale() {
|
||||
return this.locale;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param locale
|
||||
* the locale to set
|
||||
*/
|
||||
public void setLocale(String locale) {
|
||||
this.locale = locale;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param locale
|
||||
* the locale to set
|
||||
*/
|
||||
public void setLocale(Locale locale) {
|
||||
this.locale = locale.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the parameters
|
||||
*/
|
||||
public Map<String, String> getParameters() {
|
||||
return this.parameters;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param parameters
|
||||
* the parameters to set
|
||||
*/
|
||||
public void setParameters(Map<String, String> parameters) {
|
||||
this.parameters = parameters;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the msg
|
||||
*/
|
||||
public String getMsg() {
|
||||
return this.msg;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param msg
|
||||
* the msg to set
|
||||
*/
|
||||
public void setMsg(String msg) {
|
||||
this.msg = msg;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the privileges
|
||||
*/
|
||||
public List<String> getPrivileges() {
|
||||
return this.privileges;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param privileges
|
||||
* the privileges to set
|
||||
*/
|
||||
public void setPrivileges(List<String> privileges) {
|
||||
this.privileges = privileges;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,75 @@
|
|||
/*
|
||||
* Copyright (c) 2012, Robert von Burg
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* This file is part of the XXX.
|
||||
*
|
||||
* XXX is free software: you can redistribute
|
||||
* it and/or modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the License,
|
||||
* or (at your option) any later version.
|
||||
*
|
||||
* XXX 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with XXX. If not, see
|
||||
* <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package li.strolch.rest.model;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlAttribute;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
/**
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
@XmlRootElement(name = "Logout")
|
||||
@XmlAccessorType(XmlAccessType.NONE)
|
||||
public class Logout {
|
||||
|
||||
@XmlAttribute(name = "username")
|
||||
private String username;
|
||||
|
||||
@XmlAttribute(name = "sessionId")
|
||||
private String sessionId;
|
||||
|
||||
public Logout() {
|
||||
// no-arg constructor for JAXB
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the username
|
||||
*/
|
||||
public String getUsername() {
|
||||
return this.username;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param username
|
||||
* the username to set
|
||||
*/
|
||||
public void setUsername(String username) {
|
||||
this.username = username;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the sessionId
|
||||
*/
|
||||
public String getSessionId() {
|
||||
return this.sessionId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param sessionId
|
||||
* the sessionId to set
|
||||
*/
|
||||
public void setSessionId(String sessionId) {
|
||||
this.sessionId = sessionId;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,87 @@
|
|||
/*
|
||||
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package li.strolch.rest.model;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlAttribute;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
/**
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
@XmlAccessorType(XmlAccessType.NONE)
|
||||
@XmlRootElement(name = "LogoutResult")
|
||||
public class LogoutResult {
|
||||
|
||||
@XmlAttribute(name = "username")
|
||||
private String username;
|
||||
|
||||
@XmlAttribute(name = "sessionId")
|
||||
private String sessionId;
|
||||
|
||||
@XmlAttribute(name = "msg")
|
||||
private String msg;
|
||||
|
||||
public LogoutResult() {
|
||||
// no-arg constructor for JAXB
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the msg
|
||||
*/
|
||||
public String getMsg() {
|
||||
return this.msg;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param msg
|
||||
* the msg to set
|
||||
*/
|
||||
public void setMsg(String msg) {
|
||||
this.msg = msg;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the username
|
||||
*/
|
||||
public String getUsername() {
|
||||
return this.username;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param username
|
||||
* the username to set
|
||||
*/
|
||||
public void setUsername(String username) {
|
||||
this.username = username;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the sessionId
|
||||
*/
|
||||
public String getSessionId() {
|
||||
return this.sessionId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param sessionId
|
||||
* the sessionId to set
|
||||
*/
|
||||
public void setSessionId(String sessionId) {
|
||||
this.sessionId = sessionId;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,129 @@
|
|||
/*
|
||||
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package li.strolch.rest.model;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlAttribute;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
import javax.xml.bind.annotation.XmlType;
|
||||
|
||||
import li.strolch.model.Order;
|
||||
import li.strolch.model.State;
|
||||
import ch.eitchnet.utils.iso8601.ISO8601FormatFactory;
|
||||
|
||||
/**
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
@XmlAccessorType(XmlAccessType.NONE)
|
||||
@XmlRootElement(name = "Order")
|
||||
@XmlType(name = "")
|
||||
public class OrderDetail extends GroupedParameterizedElementDetail {
|
||||
|
||||
@XmlAttribute(name = "date")
|
||||
private String date;
|
||||
@XmlAttribute(name = "state")
|
||||
private State state;
|
||||
|
||||
public OrderDetail() {
|
||||
// no-arg constructor for JAXB
|
||||
}
|
||||
|
||||
/**
|
||||
* @param id
|
||||
* @param name
|
||||
* @param type
|
||||
* @param date
|
||||
* @param state
|
||||
* @param parameterizedElementDetails
|
||||
*/
|
||||
public OrderDetail(String id, String name, String type, Date date, State state,
|
||||
List<ParameterizedElementDetail> parameterizedElementDetails) {
|
||||
super(id, name, type, parameterizedElementDetails);
|
||||
this.state = state;
|
||||
this.date = ISO8601FormatFactory.getInstance().formatDate(date);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param order
|
||||
*/
|
||||
public OrderDetail(Order order) {
|
||||
super(order);
|
||||
this.state = order.getState();
|
||||
this.date = ISO8601FormatFactory.getInstance().formatDate(order.getDate());
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the date
|
||||
*/
|
||||
public String getDate() {
|
||||
return this.date;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param date
|
||||
* the date to set
|
||||
*/
|
||||
public void setDate(String date) {
|
||||
this.date = date;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the state
|
||||
*/
|
||||
public State getState() {
|
||||
return this.state;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param state
|
||||
* the state to set
|
||||
*/
|
||||
public void setState(State state) {
|
||||
this.state = state;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
int result = super.hashCode();
|
||||
result = prime * result + ((this.date == null) ? 0 : this.date.hashCode());
|
||||
result = prime * result + ((this.state == null) ? 0 : this.state.hashCode());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj)
|
||||
return true;
|
||||
if (!super.equals(obj))
|
||||
return false;
|
||||
if (getClass() != obj.getClass())
|
||||
return false;
|
||||
OrderDetail other = (OrderDetail) obj;
|
||||
if (this.date == null) {
|
||||
if (other.date != null)
|
||||
return false;
|
||||
} else if (!this.date.equals(other.date))
|
||||
return false;
|
||||
if (this.state != other.state)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,122 @@
|
|||
/*
|
||||
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package li.strolch.rest.model;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlAttribute;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
import li.strolch.model.Order;
|
||||
import li.strolch.model.State;
|
||||
import ch.eitchnet.utils.iso8601.ISO8601FormatFactory;
|
||||
|
||||
/**
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
@XmlAccessorType(XmlAccessType.NONE)
|
||||
@XmlRootElement(name = "Order")
|
||||
public class OrderOverview extends StrolchElementOverview {
|
||||
|
||||
@XmlAttribute(name = "date")
|
||||
private String date;
|
||||
@XmlAttribute(name = "state")
|
||||
private State state;
|
||||
|
||||
public OrderOverview() {
|
||||
// no-arg constructor for JAXB
|
||||
}
|
||||
|
||||
/**
|
||||
* @param id
|
||||
* @param name
|
||||
* @param type
|
||||
*/
|
||||
public OrderOverview(String id, String name, String type, Date date, State state) {
|
||||
super(id, name, type);
|
||||
this.state = state;
|
||||
this.date = ISO8601FormatFactory.getInstance().formatDate(date);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param order
|
||||
*/
|
||||
public OrderOverview(Order order) {
|
||||
super(order);
|
||||
this.state = order.getState();
|
||||
this.date = ISO8601FormatFactory.getInstance().formatDate(order.getDate());
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the date
|
||||
*/
|
||||
public String getDate() {
|
||||
return this.date;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param date
|
||||
* the date to set
|
||||
*/
|
||||
public void setDate(String date) {
|
||||
this.date = date;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the state
|
||||
*/
|
||||
public State getState() {
|
||||
return this.state;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param state
|
||||
* the state to set
|
||||
*/
|
||||
public void setState(State state) {
|
||||
this.state = state;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
int result = super.hashCode();
|
||||
result = prime * result + ((this.date == null) ? 0 : this.date.hashCode());
|
||||
result = prime * result + ((this.state == null) ? 0 : this.state.hashCode());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj)
|
||||
return true;
|
||||
if (!super.equals(obj))
|
||||
return false;
|
||||
if (getClass() != obj.getClass())
|
||||
return false;
|
||||
OrderOverview other = (OrderOverview) obj;
|
||||
if (this.date == null) {
|
||||
if (other.date != null)
|
||||
return false;
|
||||
} else if (!this.date.equals(other.date))
|
||||
return false;
|
||||
if (this.state != other.state)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,174 @@
|
|||
/*
|
||||
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package li.strolch.rest.model;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlAttribute;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
import li.strolch.model.parameter.Parameter;
|
||||
|
||||
/**
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
@XmlAccessorType(XmlAccessType.NONE)
|
||||
@XmlRootElement(name = "Parameter")
|
||||
public class ParameterDetail extends StrolchElementDetail {
|
||||
|
||||
@XmlAttribute(name = "hidden")
|
||||
private boolean hidden;
|
||||
@XmlAttribute(name = "interpretation")
|
||||
private String interpretation;
|
||||
@XmlAttribute(name = "uom")
|
||||
private String uom;
|
||||
@XmlAttribute(name = "value")
|
||||
private String value;
|
||||
|
||||
public ParameterDetail() {
|
||||
// no-arg constructor for JAXB
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param id
|
||||
* @param name
|
||||
* @param type
|
||||
* @param hidden
|
||||
* @param interpretation
|
||||
* @param uom
|
||||
* @param value
|
||||
*/
|
||||
public ParameterDetail(String id, String name, String type, boolean hidden, String interpretation, String uom,
|
||||
String value) {
|
||||
super(id, name, type);
|
||||
this.hidden = hidden;
|
||||
this.interpretation = interpretation;
|
||||
this.uom = uom;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param parameter
|
||||
*/
|
||||
public ParameterDetail(Parameter<?> parameter) {
|
||||
super(parameter);
|
||||
this.hidden = parameter.isHidden();
|
||||
this.interpretation = parameter.getInterpretation();
|
||||
this.uom = parameter.getUom();
|
||||
this.value = parameter.getValueAsString();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the hidden
|
||||
*/
|
||||
public boolean isHidden() {
|
||||
return this.hidden;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param hidden
|
||||
* the hidden to set
|
||||
*/
|
||||
public void setHidden(boolean hidden) {
|
||||
this.hidden = hidden;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the interpretation
|
||||
*/
|
||||
public String getInterpretation() {
|
||||
return this.interpretation;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param interpretation
|
||||
* the interpretation to set
|
||||
*/
|
||||
public void setInterpretation(String interpretation) {
|
||||
this.interpretation = interpretation;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the uom
|
||||
*/
|
||||
public String getUom() {
|
||||
return this.uom;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param uom
|
||||
* the uom to set
|
||||
*/
|
||||
public void setUom(String uom) {
|
||||
this.uom = uom;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the value
|
||||
*/
|
||||
public String getValue() {
|
||||
return this.value;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param value
|
||||
* the value to set
|
||||
*/
|
||||
public void setValue(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
int result = super.hashCode();
|
||||
result = prime * result + (this.hidden ? 1231 : 1237);
|
||||
result = prime * result + ((this.interpretation == null) ? 0 : this.interpretation.hashCode());
|
||||
result = prime * result + ((this.uom == null) ? 0 : this.uom.hashCode());
|
||||
result = prime * result + ((this.value == null) ? 0 : this.value.hashCode());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj)
|
||||
return true;
|
||||
if (!super.equals(obj))
|
||||
return false;
|
||||
if (getClass() != obj.getClass())
|
||||
return false;
|
||||
ParameterDetail other = (ParameterDetail) obj;
|
||||
if (this.hidden != other.hidden)
|
||||
return false;
|
||||
if (this.interpretation == null) {
|
||||
if (other.interpretation != null)
|
||||
return false;
|
||||
} else if (!this.interpretation.equals(other.interpretation))
|
||||
return false;
|
||||
if (this.uom == null) {
|
||||
if (other.uom != null)
|
||||
return false;
|
||||
} else if (!this.uom.equals(other.uom))
|
||||
return false;
|
||||
if (this.value == null) {
|
||||
if (other.value != null)
|
||||
return false;
|
||||
} else if (!this.value.equals(other.value))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,97 @@
|
|||
/*
|
||||
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package li.strolch.rest.model;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
import li.strolch.model.ParameterizedElement;
|
||||
import li.strolch.model.parameter.Parameter;
|
||||
|
||||
/**
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
@XmlAccessorType(XmlAccessType.NONE)
|
||||
@XmlRootElement(name = "ParameterBag")
|
||||
public class ParameterizedElementDetail extends StrolchElementDetail {
|
||||
|
||||
@XmlElement(name = "parameters", type = ParameterDetail.class)
|
||||
private List<ParameterDetail> parameters;
|
||||
|
||||
public ParameterizedElementDetail() {
|
||||
// no-arg constructor for JAXB
|
||||
}
|
||||
|
||||
public ParameterizedElementDetail(String id, String name, String type, List<ParameterDetail> parameters) {
|
||||
super(id, name, type);
|
||||
this.parameters = parameters;
|
||||
}
|
||||
|
||||
public ParameterizedElementDetail(ParameterizedElement parameterizedElement) {
|
||||
super(parameterizedElement);
|
||||
|
||||
List<Parameter<?>> parameters = parameterizedElement.getParameters();
|
||||
this.parameters = new ArrayList<>(parameters.size());
|
||||
for (Parameter<?> parameter : parameters) {
|
||||
this.parameters.add(new ParameterDetail(parameter));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the parameters
|
||||
*/
|
||||
public List<ParameterDetail> getParameters() {
|
||||
return this.parameters;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param parameters
|
||||
* the parameters to set
|
||||
*/
|
||||
public void setParameters(List<ParameterDetail> parameters) {
|
||||
this.parameters = parameters;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
int result = super.hashCode();
|
||||
result = prime * result + ((this.parameters == null) ? 0 : this.parameters.hashCode());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj)
|
||||
return true;
|
||||
if (!super.equals(obj))
|
||||
return false;
|
||||
if (getClass() != obj.getClass())
|
||||
return false;
|
||||
ParameterizedElementDetail other = (ParameterizedElementDetail) obj;
|
||||
if (this.parameters == null) {
|
||||
if (other.parameters != null)
|
||||
return false;
|
||||
} else if (!this.parameters.equals(other.parameters))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,92 @@
|
|||
/*
|
||||
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package li.strolch.rest.model;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
/**
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
@XmlAccessorType(XmlAccessType.NONE)
|
||||
@XmlRootElement(name = "Realm")
|
||||
public class RealmDetail {
|
||||
|
||||
@XmlElement(name = "elementMaps")
|
||||
private List<ElementMapsOverview> elementMapOverviews;
|
||||
|
||||
public RealmDetail() {
|
||||
// no-arg constructor for JAXB
|
||||
}
|
||||
|
||||
public RealmDetail(List<ElementMapsOverview> elementMapOverviews) {
|
||||
this.elementMapOverviews = elementMapOverviews;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the elementMapOverviews
|
||||
*/
|
||||
public List<ElementMapsOverview> getElementMapOverviews() {
|
||||
return this.elementMapOverviews;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param elementMapOverviews
|
||||
* the elementMapOverviews to set
|
||||
*/
|
||||
public void setElementMapOverviews(List<ElementMapsOverview> elementMapOverviews) {
|
||||
this.elementMapOverviews = elementMapOverviews;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + ((this.elementMapOverviews == null) ? 0 : this.elementMapOverviews.hashCode());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj)
|
||||
return true;
|
||||
if (obj == null)
|
||||
return false;
|
||||
if (getClass() != obj.getClass())
|
||||
return false;
|
||||
RealmDetail other = (RealmDetail) obj;
|
||||
if (this.elementMapOverviews == null) {
|
||||
if (other.elementMapOverviews != null)
|
||||
return false;
|
||||
} else if (!this.elementMapOverviews.equals(other.elementMapOverviews))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@SuppressWarnings("nls")
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("RealmDetail [elementMapOverviews=");
|
||||
sb.append(this.elementMapOverviews);
|
||||
sb.append("]");
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,117 @@
|
|||
/*
|
||||
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package li.strolch.rest.model;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlAttribute;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
/**
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
@XmlAccessorType(XmlAccessType.NONE)
|
||||
@XmlRootElement(name = "RealmOverview")
|
||||
public class RealmOverview {
|
||||
|
||||
@XmlAttribute(name = "realmName")
|
||||
private String realmName;
|
||||
@XmlAttribute(name = "size")
|
||||
private long size;
|
||||
|
||||
public RealmOverview() {
|
||||
// no-arg constructor for JAXB
|
||||
}
|
||||
|
||||
/**
|
||||
* @param realmName
|
||||
* @param size
|
||||
*/
|
||||
public RealmOverview(String realmName, long size) {
|
||||
this.realmName = realmName;
|
||||
this.size = size;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the realmName
|
||||
*/
|
||||
public String getRealmName() {
|
||||
return this.realmName;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param realmName
|
||||
* the realmName to set
|
||||
*/
|
||||
public void setRealmName(String realmName) {
|
||||
this.realmName = realmName;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the size
|
||||
*/
|
||||
public long getSize() {
|
||||
return this.size;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param size
|
||||
* the size to set
|
||||
*/
|
||||
public void setSize(long size) {
|
||||
this.size = size;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + ((this.realmName == null) ? 0 : this.realmName.hashCode());
|
||||
result = prime * result + (int) (this.size ^ (this.size >>> 32));
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj)
|
||||
return true;
|
||||
if (obj == null)
|
||||
return false;
|
||||
if (getClass() != obj.getClass())
|
||||
return false;
|
||||
RealmOverview other = (RealmOverview) obj;
|
||||
if (this.realmName == null) {
|
||||
if (other.realmName != null)
|
||||
return false;
|
||||
} else if (!this.realmName.equals(other.realmName))
|
||||
return false;
|
||||
if (this.size != other.size)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@SuppressWarnings("nls")
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("RealmOverview [realmName=");
|
||||
sb.append(this.realmName);
|
||||
sb.append(", size=");
|
||||
sb.append(this.size);
|
||||
sb.append("]");
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,55 @@
|
|||
/*
|
||||
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package li.strolch.rest.model;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
import javax.xml.bind.annotation.XmlType;
|
||||
|
||||
import li.strolch.model.Resource;
|
||||
|
||||
/**
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
@XmlAccessorType(XmlAccessType.NONE)
|
||||
@XmlRootElement(name = "Resource")
|
||||
@XmlType(name = "")
|
||||
public class ResourceDetail extends GroupedParameterizedElementDetail {
|
||||
|
||||
public ResourceDetail() {
|
||||
// no-arg constructor for JAXB
|
||||
}
|
||||
|
||||
/**
|
||||
* @param id
|
||||
* @param name
|
||||
* @param type
|
||||
* @param parameterizedElements
|
||||
*/
|
||||
public ResourceDetail(String id, String name, String type, List<ParameterizedElementDetail> parameterizedElements) {
|
||||
super(id, name, type, parameterizedElements);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param resource
|
||||
*/
|
||||
public ResourceDetail(Resource resource) {
|
||||
super(resource);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
/*
|
||||
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package li.strolch.rest.model;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
import li.strolch.model.Resource;
|
||||
|
||||
/**
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
@XmlAccessorType(XmlAccessType.NONE)
|
||||
@XmlRootElement(name = "Resource")
|
||||
public class ResourceOverview extends StrolchElementOverview {
|
||||
|
||||
public ResourceOverview() {
|
||||
// no-arg constructor for JAXB
|
||||
}
|
||||
|
||||
/**
|
||||
* @param id
|
||||
* @param name
|
||||
* @param type
|
||||
*/
|
||||
public ResourceOverview(String id, String name, String type) {
|
||||
super(id, name, type);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param resource
|
||||
*/
|
||||
public ResourceOverview(Resource resource) {
|
||||
super(resource);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,144 @@
|
|||
/*
|
||||
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package li.strolch.rest.model;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlAttribute;
|
||||
import javax.xml.bind.annotation.XmlSeeAlso;
|
||||
|
||||
import li.strolch.model.StrolchElement;
|
||||
|
||||
/**
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
@XmlAccessorType(XmlAccessType.NONE)
|
||||
@XmlSeeAlso({ GroupedParameterizedElementDetail.class, ParameterizedElementDetail.class, ParameterDetail.class })
|
||||
public abstract class StrolchElementDetail {
|
||||
|
||||
@XmlAttribute(name = "id", required = true)
|
||||
private String id;
|
||||
@XmlAttribute(name = "name", required = true)
|
||||
private String name;
|
||||
@XmlAttribute(name = "type", required = true)
|
||||
private String type;
|
||||
|
||||
public StrolchElementDetail() {
|
||||
// no-arg constructor for JAXB
|
||||
}
|
||||
|
||||
/**
|
||||
* @param id
|
||||
* @param name
|
||||
* @param type
|
||||
*/
|
||||
public StrolchElementDetail(String id, String name, String type) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param strolchElement
|
||||
*/
|
||||
public StrolchElementDetail(StrolchElement strolchElement) {
|
||||
this.id = strolchElement.getId();
|
||||
this.name = strolchElement.getName();
|
||||
this.type = strolchElement.getType();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the id
|
||||
*/
|
||||
public String getId() {
|
||||
return this.id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param id
|
||||
* the id to set
|
||||
*/
|
||||
public void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the name
|
||||
*/
|
||||
public String getName() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param name
|
||||
* the name to set
|
||||
*/
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the type
|
||||
*/
|
||||
public String getType() {
|
||||
return this.type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param type
|
||||
* the type to set
|
||||
*/
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + ((this.id == null) ? 0 : this.id.hashCode());
|
||||
result = prime * result + ((this.name == null) ? 0 : this.name.hashCode());
|
||||
result = prime * result + ((this.type == null) ? 0 : this.type.hashCode());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj)
|
||||
return true;
|
||||
if (obj == null)
|
||||
return false;
|
||||
if (getClass() != obj.getClass())
|
||||
return false;
|
||||
StrolchElementDetail other = (StrolchElementDetail) obj;
|
||||
if (this.id == null) {
|
||||
if (other.id != null)
|
||||
return false;
|
||||
} else if (!this.id.equals(other.id))
|
||||
return false;
|
||||
if (this.name == null) {
|
||||
if (other.name != null)
|
||||
return false;
|
||||
} else if (!this.name.equals(other.name))
|
||||
return false;
|
||||
if (this.type == null) {
|
||||
if (other.type != null)
|
||||
return false;
|
||||
} else if (!this.type.equals(other.type))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,144 @@
|
|||
/*
|
||||
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package li.strolch.rest.model;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlAttribute;
|
||||
import javax.xml.bind.annotation.XmlSeeAlso;
|
||||
|
||||
import li.strolch.model.StrolchElement;
|
||||
|
||||
/**
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
@XmlAccessorType(XmlAccessType.NONE)
|
||||
@XmlSeeAlso({ ResourceOverview.class, OrderOverview.class })
|
||||
public abstract class StrolchElementOverview {
|
||||
|
||||
@XmlAttribute(name = "id", required = true)
|
||||
private String id;
|
||||
@XmlAttribute(name = "name", required = true)
|
||||
private String name;
|
||||
@XmlAttribute(name = "type", required = true)
|
||||
private String type;
|
||||
|
||||
public StrolchElementOverview() {
|
||||
// no-arg constructor for JAXB
|
||||
}
|
||||
|
||||
/**
|
||||
* @param id
|
||||
* @param name
|
||||
* @param type
|
||||
*/
|
||||
public StrolchElementOverview(String id, String name, String type) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param strolchElement
|
||||
*/
|
||||
public StrolchElementOverview(StrolchElement strolchElement) {
|
||||
this.id = strolchElement.getId();
|
||||
this.name = strolchElement.getName();
|
||||
this.type = strolchElement.getType();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the id
|
||||
*/
|
||||
public String getId() {
|
||||
return this.id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param id
|
||||
* the id to set
|
||||
*/
|
||||
public void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the name
|
||||
*/
|
||||
public String getName() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param name
|
||||
* the name to set
|
||||
*/
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the type
|
||||
*/
|
||||
public String getType() {
|
||||
return this.type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param type
|
||||
* the type to set
|
||||
*/
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + ((this.id == null) ? 0 : this.id.hashCode());
|
||||
result = prime * result + ((this.name == null) ? 0 : this.name.hashCode());
|
||||
result = prime * result + ((this.type == null) ? 0 : this.type.hashCode());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj)
|
||||
return true;
|
||||
if (obj == null)
|
||||
return false;
|
||||
if (getClass() != obj.getClass())
|
||||
return false;
|
||||
StrolchElementOverview other = (StrolchElementOverview) obj;
|
||||
if (this.id == null) {
|
||||
if (other.id != null)
|
||||
return false;
|
||||
} else if (!this.id.equals(other.id))
|
||||
return false;
|
||||
if (this.name == null) {
|
||||
if (other.name != null)
|
||||
return false;
|
||||
} else if (!this.name.equals(other.name))
|
||||
return false;
|
||||
if (this.type == null) {
|
||||
if (other.type != null)
|
||||
return false;
|
||||
} else if (!this.type.equals(other.type))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,114 @@
|
|||
/*
|
||||
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package li.strolch.rest.model;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlAttribute;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlElements;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
/**
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
@XmlAccessorType(XmlAccessType.NONE)
|
||||
@XmlRootElement(name = "Types")
|
||||
public class TypeDetail {
|
||||
|
||||
@XmlAttribute(name = "type")
|
||||
private String type;
|
||||
|
||||
@XmlElements({ @XmlElement(name = "orders", type = OrderOverview.class),
|
||||
@XmlElement(name = "resources", type = ResourceOverview.class) })
|
||||
private List<StrolchElementOverview> elementOverviews;
|
||||
|
||||
public TypeDetail() {
|
||||
// no-arg constructor for JAXB
|
||||
}
|
||||
|
||||
/**
|
||||
* @param type
|
||||
* @param elementOverviews
|
||||
*/
|
||||
public TypeDetail(String type, List<StrolchElementOverview> elementOverviews) {
|
||||
this.type = type;
|
||||
this.elementOverviews = elementOverviews;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the type
|
||||
*/
|
||||
public String getType() {
|
||||
return this.type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param type
|
||||
* the type to set
|
||||
*/
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the elementOverviews
|
||||
*/
|
||||
public List<StrolchElementOverview> getElementOverviews() {
|
||||
return this.elementOverviews;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param elementOverviews
|
||||
* the elementOverviews to set
|
||||
*/
|
||||
public void setElementOverviews(List<StrolchElementOverview> elementOverviews) {
|
||||
this.elementOverviews = elementOverviews;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + ((this.elementOverviews == null) ? 0 : this.elementOverviews.hashCode());
|
||||
result = prime * result + ((this.type == null) ? 0 : this.type.hashCode());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj)
|
||||
return true;
|
||||
if (obj == null)
|
||||
return false;
|
||||
if (getClass() != obj.getClass())
|
||||
return false;
|
||||
TypeDetail other = (TypeDetail) obj;
|
||||
if (this.elementOverviews == null) {
|
||||
if (other.elementOverviews != null)
|
||||
return false;
|
||||
} else if (!this.elementOverviews.equals(other.elementOverviews))
|
||||
return false;
|
||||
if (this.type == null) {
|
||||
if (other.type != null)
|
||||
return false;
|
||||
} else if (!this.type.equals(other.type))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,113 @@
|
|||
/*
|
||||
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package li.strolch.rest.model;
|
||||
|
||||
import java.text.MessageFormat;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlAttribute;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
/**
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
@XmlAccessorType(XmlAccessType.NONE)
|
||||
@XmlRootElement(name = "Types")
|
||||
public class TypeOverview {
|
||||
|
||||
@XmlAttribute(name = "type")
|
||||
private String type;
|
||||
|
||||
@XmlAttribute(name = "size")
|
||||
private long size;
|
||||
|
||||
public TypeOverview() {
|
||||
// no-arg constructor for JAXB
|
||||
}
|
||||
|
||||
/**
|
||||
* @param type
|
||||
* @param size
|
||||
*/
|
||||
public TypeOverview(String type, long size) {
|
||||
this.type = type;
|
||||
this.size = size;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the type
|
||||
*/
|
||||
public String getType() {
|
||||
return this.type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param type
|
||||
* the type to set
|
||||
*/
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the size
|
||||
*/
|
||||
public long getSize() {
|
||||
return this.size;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param size
|
||||
* the size to set
|
||||
*/
|
||||
public void setSize(long size) {
|
||||
this.size = size;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + (int) (this.size ^ (this.size >>> 32));
|
||||
result = prime * result + ((this.type == null) ? 0 : this.type.hashCode());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj)
|
||||
return true;
|
||||
if (obj == null)
|
||||
return false;
|
||||
if (getClass() != obj.getClass())
|
||||
return false;
|
||||
TypeOverview other = (TypeOverview) obj;
|
||||
if (this.size != other.size)
|
||||
return false;
|
||||
if (this.type == null) {
|
||||
if (other.type != null)
|
||||
return false;
|
||||
} else if (!this.type.equals(other.type))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return MessageFormat.format("TypeOverview [type={0}, size={1}]", this.type, this.size); //$NON-NLS-1$
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
groupId=${project.groupId}
|
||||
artifactId=${project.artifactId}
|
||||
artifactVersion=${project.version}
|
||||
scmRevision=r${buildNumber}
|
||||
scmBranch=${scmBranch}
|
||||
buildTimestamp=${buildTimestamp}
|
|
@ -0,0 +1,112 @@
|
|||
/*
|
||||
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package li.strolch.rest.inspector.test;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
|
||||
import javax.ws.rs.core.Application;
|
||||
|
||||
import li.strolch.rest.StrolchRestfulClasses;
|
||||
import li.strolch.testbase.runtime.RuntimeMock;
|
||||
|
||||
import org.glassfish.jersey.filter.LoggingFilter;
|
||||
import org.glassfish.jersey.server.ResourceConfig;
|
||||
import org.glassfish.jersey.server.ServerProperties;
|
||||
import org.glassfish.jersey.server.TracingConfig;
|
||||
import org.glassfish.jersey.servlet.ServletProperties;
|
||||
import org.glassfish.jersey.test.DeploymentContext;
|
||||
import org.glassfish.jersey.test.JerseyTest;
|
||||
import org.glassfish.jersey.test.ServletDeploymentContext;
|
||||
import org.glassfish.jersey.test.TestProperties;
|
||||
import org.glassfish.jersey.test.grizzly.GrizzlyWebTestContainerFactory;
|
||||
import org.glassfish.jersey.test.spi.TestContainerException;
|
||||
import org.glassfish.jersey.test.spi.TestContainerFactory;
|
||||
import org.junit.AfterClass;
|
||||
import org.junit.BeforeClass;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
@SuppressWarnings("nls")
|
||||
public abstract class AbstractRestfulTest extends JerseyTest {
|
||||
|
||||
private static final URI BASE_URI = URI.create("http://localhost:8888/base");
|
||||
protected static final Logger logger = LoggerFactory.getLogger(AbstractRestfulTest.class);
|
||||
private static final String RUNTIME_PATH = "target/withPrivilegeRuntime/"; //$NON-NLS-1$
|
||||
private static final String CONFIG_SRC = "src/test/resources/withPrivilegeRuntime"; //$NON-NLS-1$
|
||||
private static RuntimeMock runtimeMock;
|
||||
|
||||
@BeforeClass
|
||||
public static void beforeClass() throws IllegalArgumentException, IOException {
|
||||
|
||||
File rootPath = new File(RUNTIME_PATH);
|
||||
File configSrc = new File(CONFIG_SRC);
|
||||
runtimeMock = new RuntimeMock();
|
||||
runtimeMock.mockRuntime(rootPath, configSrc);
|
||||
runtimeMock.startContainer();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected URI getBaseUri() {
|
||||
return BASE_URI;
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public static void afterClass() {
|
||||
runtimeMock.destroyRuntime();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected TestContainerFactory getTestContainerFactory() throws TestContainerException {
|
||||
return new GrizzlyWebTestContainerFactory();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected DeploymentContext configureDeployment() {
|
||||
return ServletDeploymentContext.builder(configure()).contextPath("rest").build();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Application configure() {
|
||||
forceEnable(TestProperties.LOG_TRAFFIC);
|
||||
enable(TestProperties.DUMP_ENTITY);
|
||||
return createApp();
|
||||
}
|
||||
|
||||
public static ResourceConfig createApp() {
|
||||
ResourceConfig resourceConfig = new ResourceConfig();
|
||||
resourceConfig.setApplicationName("RestTest");
|
||||
|
||||
for (Class<?> clazz : StrolchRestfulClasses.restfulClasses) {
|
||||
resourceConfig.register(clazz);
|
||||
}
|
||||
for (Class<?> clazz : StrolchRestfulClasses.providerClasses) {
|
||||
resourceConfig.register(clazz);
|
||||
}
|
||||
|
||||
resourceConfig.register(LoggingFilter.class);
|
||||
//.register(createMoxyJsonResolver())
|
||||
// Logging
|
||||
// Tracing support.
|
||||
resourceConfig.property(ServerProperties.TRACING, TracingConfig.ALL.name());
|
||||
resourceConfig.property(ServletProperties.FILTER_FORWARD_ON_404, true);
|
||||
return resourceConfig;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,141 @@
|
|||
/*
|
||||
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package li.strolch.rest.inspector.test;
|
||||
|
||||
import static org.hamcrest.MatcherAssert.assertThat;
|
||||
import static org.hamcrest.Matchers.containsString;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertNull;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
import javax.ws.rs.client.Entity;
|
||||
import javax.ws.rs.client.Invocation.Builder;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.core.Response.Status;
|
||||
|
||||
import li.strolch.rest.model.Login;
|
||||
import li.strolch.rest.model.LoginResult;
|
||||
import li.strolch.rest.model.LogoutResult;
|
||||
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
@Ignore
|
||||
@SuppressWarnings("nls")
|
||||
public class AuthenticationTest extends AbstractRestfulTest {
|
||||
|
||||
private static final String ROOT_PATH = "strolch/authentication";
|
||||
|
||||
@Test
|
||||
public void shouldAuthenticate() {
|
||||
|
||||
// login
|
||||
Login login = new Login();
|
||||
login.setUsername("jill");
|
||||
login.setPassword("jill");
|
||||
Entity<Login> loginEntity = Entity.entity(login, MediaType.APPLICATION_JSON);
|
||||
Response result = target().path(ROOT_PATH).request(MediaType.APPLICATION_JSON).post(loginEntity);
|
||||
assertEquals(Status.OK.getStatusCode(), result.getStatus());
|
||||
LoginResult loginResult = result.readEntity(LoginResult.class);
|
||||
assertNotNull(loginResult);
|
||||
assertEquals("jill", loginResult.getUsername());
|
||||
assertEquals(64, loginResult.getSessionId().length());
|
||||
assertNull(loginResult.getMsg());
|
||||
|
||||
// logout
|
||||
result = target().path(ROOT_PATH + "/" + loginResult.getSessionId()).request(MediaType.APPLICATION_JSON)
|
||||
.delete();
|
||||
assertEquals(Status.OK.getStatusCode(), result.getStatus());
|
||||
assertNotNull(loginResult);
|
||||
LogoutResult logoutResult = result.readEntity(LogoutResult.class);
|
||||
assertNotNull(logoutResult);
|
||||
assertNull(logoutResult.getMsg());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldUseRequestedLanguage() {
|
||||
|
||||
// login
|
||||
Login login = new Login();
|
||||
login.setUsername("jill");
|
||||
login.setPassword("jill");
|
||||
Entity<Login> loginEntity = Entity.entity(login, MediaType.APPLICATION_JSON);
|
||||
Builder builder = target().path(ROOT_PATH).request(MediaType.APPLICATION_JSON);
|
||||
builder = builder.acceptLanguage(Locale.ITALY);
|
||||
Response result = builder.post(loginEntity);
|
||||
assertEquals(Status.OK.getStatusCode(), result.getStatus());
|
||||
LoginResult loginResult = result.readEntity(LoginResult.class);
|
||||
assertNotNull(loginResult);
|
||||
assertEquals("jill", loginResult.getUsername());
|
||||
assertEquals(64, loginResult.getSessionId().length());
|
||||
assertEquals(Locale.ITALY.toString(), loginResult.getLocale());
|
||||
assertNull(loginResult.getMsg());
|
||||
|
||||
// logout
|
||||
result = target().path(ROOT_PATH + "/" + loginResult.getSessionId()).request(MediaType.APPLICATION_JSON)
|
||||
.delete();
|
||||
assertEquals(Status.OK.getStatusCode(), result.getStatus());
|
||||
assertNotNull(loginResult);
|
||||
LogoutResult logoutResult = result.readEntity(LogoutResult.class);
|
||||
assertNotNull(logoutResult);
|
||||
assertNull(logoutResult.getMsg());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldNotAuthenticate() {
|
||||
|
||||
// login
|
||||
Login login = new Login();
|
||||
login.setUsername("admin");
|
||||
login.setPassword("blalba");
|
||||
Entity<Login> loginEntity = Entity.entity(login, MediaType.APPLICATION_JSON);
|
||||
Response result = target().path(ROOT_PATH).request(MediaType.APPLICATION_JSON).post(loginEntity);
|
||||
assertEquals(Status.UNAUTHORIZED.getStatusCode(), result.getStatus());
|
||||
LogoutResult logoutResult = result.readEntity(LogoutResult.class);
|
||||
assertNotNull(logoutResult);
|
||||
assertEquals("Could not log in due to: Authentication credentials are invalid", logoutResult.getMsg());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldFailLogoutIllegalSession() {
|
||||
|
||||
// login
|
||||
Login login = new Login();
|
||||
login.setUsername("jill");
|
||||
login.setPassword("jill");
|
||||
Entity<Login> loginEntity = Entity.entity(login, MediaType.APPLICATION_JSON);
|
||||
Response result = target().path(ROOT_PATH).request(MediaType.APPLICATION_JSON).post(loginEntity);
|
||||
assertEquals(Status.OK.getStatusCode(), result.getStatus());
|
||||
LoginResult loginResult = result.readEntity(LoginResult.class);
|
||||
assertNotNull(loginResult);
|
||||
assertEquals("jill", loginResult.getUsername());
|
||||
assertEquals(64, loginResult.getSessionId().length());
|
||||
assertNull(loginResult.getMsg());
|
||||
|
||||
// logout
|
||||
result = target().path(ROOT_PATH + "/blabla").request(MediaType.APPLICATION_JSON).delete();
|
||||
assertEquals(Status.UNAUTHORIZED.getStatusCode(), result.getStatus());
|
||||
LogoutResult logoutResult = result.readEntity(LogoutResult.class);
|
||||
assertNotNull(logoutResult);
|
||||
assertThat(logoutResult.getMsg(), containsString("No certificate exists for sessionId blabla"));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,81 @@
|
|||
/*
|
||||
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package li.strolch.rest.inspector.test;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.core.Response.Status;
|
||||
|
||||
import li.strolch.runtime.query.enums.StrolchEnum;
|
||||
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
@Ignore
|
||||
@SuppressWarnings("nls")
|
||||
public class EnumTest extends AbstractRestfulTest {
|
||||
|
||||
private static final String ROOT_PATH = "strolch/enums";
|
||||
|
||||
@Test
|
||||
public void shouldQuerySex() {
|
||||
|
||||
// query
|
||||
Response result = target().path(ROOT_PATH + "/sex").request(MediaType.APPLICATION_JSON)
|
||||
.acceptLanguage(Locale.ENGLISH).get();
|
||||
assertEquals(Status.OK.getStatusCode(), result.getStatus());
|
||||
StrolchEnum strolchEnum = result.readEntity(StrolchEnum.class);
|
||||
assertNotNull(strolchEnum);
|
||||
assertEquals("sex", strolchEnum.getName());
|
||||
assertEquals(4, strolchEnum.getValues().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldQuerySalutation() {
|
||||
|
||||
// query
|
||||
Response result = target().path(ROOT_PATH + "/salutation").request(MediaType.APPLICATION_JSON)
|
||||
.acceptLanguage(Locale.ENGLISH).get();
|
||||
assertEquals(Status.OK.getStatusCode(), result.getStatus());
|
||||
StrolchEnum strolchEnum = result.readEntity(StrolchEnum.class);
|
||||
assertNotNull(strolchEnum);
|
||||
assertEquals("salutation", strolchEnum.getName());
|
||||
assertEquals(3, strolchEnum.getValues().size());
|
||||
assertEquals("Mrs", strolchEnum.getValue("mrs"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldQueryGermanSalutation() {
|
||||
|
||||
// query
|
||||
Response result = target().path(ROOT_PATH + "/salutation").request(MediaType.APPLICATION_JSON)
|
||||
.acceptLanguage(Locale.GERMAN).get();
|
||||
assertEquals(Status.OK.getStatusCode(), result.getStatus());
|
||||
StrolchEnum strolchEnum = result.readEntity(StrolchEnum.class);
|
||||
assertNotNull(strolchEnum);
|
||||
assertEquals("salutation", strolchEnum.getName());
|
||||
assertEquals(3, strolchEnum.getValues().size());
|
||||
assertEquals("Frau", strolchEnum.getValue("mrs"));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,185 @@
|
|||
/*
|
||||
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package li.strolch.rest.inspector.test;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.ws.rs.client.WebTarget;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.core.Response.Status;
|
||||
|
||||
import li.strolch.rest.model.AgentOverview;
|
||||
import li.strolch.rest.model.ElementMapOverview;
|
||||
import li.strolch.rest.model.ElementMapType;
|
||||
import li.strolch.rest.model.ElementMapsOverview;
|
||||
import li.strolch.rest.model.RealmDetail;
|
||||
import li.strolch.rest.model.RealmOverview;
|
||||
import li.strolch.rest.model.TypeOverview;
|
||||
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
@SuppressWarnings("nls")
|
||||
@Ignore
|
||||
public class InspectorTest extends AbstractRestfulTest {
|
||||
|
||||
private static final String ROOT_PATH = "strolch/inspector/";
|
||||
|
||||
@Test
|
||||
public void shouldGetAgent() {
|
||||
|
||||
Response response = target().path("/").request(MediaType.TEXT_HTML).get();
|
||||
assertEquals(Status.OK.getStatusCode(), response.getStatus());
|
||||
|
||||
// expected result
|
||||
List<RealmOverview> realms = new ArrayList<>(1);
|
||||
realms.add(new RealmOverview("defaultRealm", 6));
|
||||
AgentOverview expectedAgentOverview = new AgentOverview(realms);
|
||||
|
||||
// query
|
||||
Response result = target().path(ROOT_PATH).request(MediaType.APPLICATION_JSON).get();
|
||||
assertEquals(Status.OK.getStatusCode(), result.getStatus());
|
||||
AgentOverview agentOverview = result.readEntity(AgentOverview.class);
|
||||
|
||||
// assertions
|
||||
assertEquals(expectedAgentOverview, agentOverview);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldGetRealm() {
|
||||
|
||||
// expected result
|
||||
List<ElementMapsOverview> elementMapOverviews = new ArrayList<>(2);
|
||||
Set<String> resourceTypes = new HashSet<>();
|
||||
resourceTypes.add("Template");
|
||||
resourceTypes.add("TestType");
|
||||
resourceTypes.add("Enumeration");
|
||||
elementMapOverviews.add(new ElementMapsOverview(ElementMapType.RESOURCE, 4, resourceTypes));
|
||||
Set<String> orderTypes = new HashSet<>();
|
||||
orderTypes.add("Template");
|
||||
orderTypes.add("TestType");
|
||||
elementMapOverviews.add(new ElementMapsOverview(ElementMapType.ORDER, 2, orderTypes));
|
||||
RealmDetail expectedRealmDetail = new RealmDetail(elementMapOverviews);
|
||||
|
||||
// query
|
||||
Response result = target().path(ROOT_PATH + "defaultRealm").request(MediaType.APPLICATION_JSON).get();
|
||||
assertEquals(Status.OK.getStatusCode(), result.getStatus());
|
||||
RealmDetail realmDetail = result.readEntity(RealmDetail.class);
|
||||
|
||||
// assertions
|
||||
assertEquals(expectedRealmDetail, realmDetail);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldGetResourcesOverview() {
|
||||
|
||||
// expected result
|
||||
String elementMapName = "Resource";
|
||||
List<TypeOverview> typeOverviews = new ArrayList<>(2);
|
||||
typeOverviews.add(new TypeOverview("Enumeration", 2));
|
||||
typeOverviews.add(new TypeOverview("Template", 1));
|
||||
typeOverviews.add(new TypeOverview("TestType", 1));
|
||||
ElementMapOverview expectedElementMapOverview = new ElementMapOverview(elementMapName, typeOverviews);
|
||||
|
||||
// query
|
||||
Response result = target().path(ROOT_PATH + "defaultRealm/resource").request(MediaType.APPLICATION_JSON).get();
|
||||
assertEquals(Status.OK.getStatusCode(), result.getStatus());
|
||||
ElementMapOverview elementMapOverview = result.readEntity(ElementMapOverview.class);
|
||||
|
||||
// assertions
|
||||
assertEquals(expectedElementMapOverview, elementMapOverview);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldGetOrdersOverview() {
|
||||
|
||||
// expected result
|
||||
String elementMapName = "Order";
|
||||
List<TypeOverview> typeOverviews = new ArrayList<>(2);
|
||||
typeOverviews.add(new TypeOverview("Template", 1));
|
||||
typeOverviews.add(new TypeOverview("TestType", 1));
|
||||
ElementMapOverview expectedElementMapOverview = new ElementMapOverview(elementMapName, typeOverviews);
|
||||
|
||||
// query
|
||||
Response result = target().path(ROOT_PATH + "defaultRealm/order").request(MediaType.APPLICATION_JSON).get();
|
||||
assertEquals(Status.OK.getStatusCode(), result.getStatus());
|
||||
ElementMapOverview elementMapOverview = result.readEntity(ElementMapOverview.class);
|
||||
|
||||
// assertions
|
||||
assertEquals(expectedElementMapOverview, elementMapOverview);
|
||||
}
|
||||
|
||||
// TODO modify object model to include discriminator values, so that we can parse the objects
|
||||
|
||||
@Test
|
||||
public void shouldGetResourceTypeDetails() {
|
||||
|
||||
// query
|
||||
|
||||
WebTarget target = target();
|
||||
Response result = target.path(ROOT_PATH + "defaultRealm/resource/Template").request(MediaType.APPLICATION_JSON)
|
||||
.get();
|
||||
assertEquals(Status.OK.getStatusCode(), result.getStatus());
|
||||
String entity = result.readEntity(String.class);
|
||||
String expected = "{\"type\":\"Template\",\"resources\":[{\"id\":\"TestType\",\"name\":\"TestType Template\",\"type\":\"Template\"}]}";
|
||||
assertEquals(expected, entity);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldGetOrderTypeDetails() {
|
||||
|
||||
// query
|
||||
Response result = target().path(ROOT_PATH + "defaultRealm/order/Template").request(MediaType.APPLICATION_JSON)
|
||||
.get();
|
||||
assertEquals(Status.OK.getStatusCode(), result.getStatus());
|
||||
String entity = result.readEntity(String.class);
|
||||
String expected = "{\"type\":\"Template\",\"orders\":[{\"id\":\"TestType\",\"name\":\"MyTestOrder Template\",\"type\":\"Template\",\"date\":\"2012-11-30T18:12:05.628+01:00\",\"state\":\"CREATED\"}]}";
|
||||
assertEquals(expected, entity);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldGetResource() {
|
||||
|
||||
// query
|
||||
Response result = target().path(ROOT_PATH + "defaultRealm/resource/Template/TestType")
|
||||
.request(MediaType.APPLICATION_JSON).get();
|
||||
assertEquals(Status.OK.getStatusCode(), result.getStatus());
|
||||
String entity = result.readEntity(String.class);
|
||||
assertTrue(entity.contains("name\":\"TestType Template\",\"type\":\"Template\",\"parameterBags\":"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldGetOrder() {
|
||||
|
||||
// query
|
||||
Response result = target().path(ROOT_PATH + "defaultRealm/order/Template/TestType")
|
||||
.request(MediaType.APPLICATION_JSON).get();
|
||||
assertEquals(Status.OK.getStatusCode(), result.getStatus());
|
||||
String entity = result.readEntity(String.class);
|
||||
assertTrue(entity
|
||||
.contains("\"date\":\"2012-11-30T18:12:05.628+01:00\",\"state\":\"CREATED\",\"parameterBags\""));
|
||||
}
|
||||
}
|
|
@ -0,0 +1,68 @@
|
|||
/*
|
||||
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package li.strolch.rest.inspector.test;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.core.Response.Status;
|
||||
|
||||
import li.strolch.agent.api.AgentVersion;
|
||||
import li.strolch.agent.api.ComponentVersion;
|
||||
import li.strolch.agent.api.VersionQueryResult;
|
||||
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||
*/
|
||||
@Ignore
|
||||
@SuppressWarnings("nls")
|
||||
public class VersionQueryTest extends AbstractRestfulTest {
|
||||
|
||||
private static final String ROOT_PATH = "strolch/version";
|
||||
|
||||
@Test
|
||||
public void shouldQueryVersion() {
|
||||
|
||||
// query
|
||||
Response result = target().path(ROOT_PATH).request(MediaType.APPLICATION_JSON).get();
|
||||
assertEquals(Status.OK.getStatusCode(), result.getStatus());
|
||||
VersionQueryResult versionQueryResult = result.readEntity(VersionQueryResult.class);
|
||||
if (versionQueryResult.hasErrors()) {
|
||||
for (String error : versionQueryResult.getErrors()) {
|
||||
logger.error(error);
|
||||
}
|
||||
}
|
||||
|
||||
AgentVersion agentVersion = versionQueryResult.getAgentVersion();
|
||||
logger.info(agentVersion.toString());
|
||||
List<ComponentVersion> componentVersions = versionQueryResult.getComponentVersions();
|
||||
assertEquals(6, componentVersions.size());
|
||||
for (ComponentVersion version : componentVersions) {
|
||||
logger.info(version.toString());
|
||||
assertEquals("li.strolch", agentVersion.getGroupId());
|
||||
}
|
||||
|
||||
assertEquals("StrolchPersistenceTest", agentVersion.getAgentName());
|
||||
assertEquals("li.strolch", agentVersion.getGroupId());
|
||||
assertEquals("li.strolch.agent", agentVersion.getArtifactId());
|
||||
}
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE log4j:configuration PUBLIC
|
||||
"-//APACHE//DTD LOG4J 1.2//EN" "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
|
||||
<log4j:configuration debug="false" xmlns:log4j='http://jakarta.apache.org/log4j/'>
|
||||
|
||||
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
|
||||
<layout class="org.apache.log4j.PatternLayout">
|
||||
<param name="ConversionPattern" value="%d %5p [%t] %C{1} %M - %m%n" />
|
||||
</layout>
|
||||
</appender>
|
||||
<appender name="FILE" class="org.apache.log4j.FileAppender">
|
||||
<param name="File" value="sample.log"/>
|
||||
<param name="BufferedIO" value="true" />
|
||||
<param name="Append" value="true" />
|
||||
<layout class="org.apache.log4j.PatternLayout">
|
||||
<param name="ConversionPattern" value="%d %5p [%t] %C{1} %M - %m%n" />
|
||||
</layout>
|
||||
</appender>
|
||||
|
||||
<logger name="ch.eitchnet">
|
||||
<level value="info" />
|
||||
</logger>
|
||||
|
||||
<root>
|
||||
<priority value="info" />
|
||||
<appender-ref ref="CONSOLE" />
|
||||
<!-- appender-ref ref="FILE" / -->
|
||||
</root>
|
||||
|
||||
</log4j:configuration>
|
|
@ -0,0 +1,30 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Privilege>
|
||||
|
||||
<Container>
|
||||
|
||||
<Parameters>
|
||||
<!-- parameters for the container itself -->
|
||||
<Parameter name="autoPersistOnPasswordChange" value="true" />
|
||||
</Parameters>
|
||||
|
||||
<EncryptionHandler class="ch.eitchnet.privilege.handler.DefaultEncryptionHandler">
|
||||
<Parameters>
|
||||
<Parameter name="hashAlgorithm" value="SHA-256" />
|
||||
</Parameters>
|
||||
</EncryptionHandler>
|
||||
|
||||
<PersistenceHandler class="ch.eitchnet.privilege.handler.XmlPersistenceHandler">
|
||||
<Parameters>
|
||||
<Parameter name="basePath" value="target/strolchRuntime/config" />
|
||||
<Parameter name="modelXmlFile" value="PrivilegeModel.xml" />
|
||||
</Parameters>
|
||||
</PersistenceHandler>
|
||||
|
||||
</Container>
|
||||
|
||||
<Policies>
|
||||
<Policy name="DefaultPrivilege" class="ch.eitchnet.privilege.policy.DefaultPrivilege" />
|
||||
</Policies>
|
||||
|
||||
</Privilege>
|
|
@ -0,0 +1,88 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<UsersAndRoles>
|
||||
|
||||
<Users>
|
||||
<User userId="1" username="agent">
|
||||
<State>SYSTEM</State>
|
||||
<Roles>
|
||||
<Role>agent</Role>
|
||||
</Roles>
|
||||
</User>
|
||||
<User userId="1" username="admin" password="8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918">
|
||||
<Firstname>Application</Firstname>
|
||||
<Lastname>Administrator</Lastname>
|
||||
<State>ENABLED</State>
|
||||
<Locale>en_GB</Locale>
|
||||
<Roles>
|
||||
<Role>PrivilegeAdmin</Role>
|
||||
<Role>AppUser</Role>
|
||||
</Roles>
|
||||
<Properties>
|
||||
<Property name="organization" value="eitchnet.ch" />
|
||||
<Property name="organizationalUnit" value="Development" />
|
||||
</Properties>
|
||||
</User>
|
||||
|
||||
<User userId="2" username="bob" password="81b637d8fcd2c6da6359e6963113a1170de795e4b725b84d1e0b4cfd9ec58ce9">
|
||||
<Firstname>Bob</Firstname>
|
||||
<Lastname>Bernstein</Lastname>
|
||||
<State>ENABLED</State>
|
||||
<Locale>en_GB</Locale>
|
||||
<Roles>
|
||||
<Role>AppUser</Role>
|
||||
</Roles>
|
||||
|
||||
</User>
|
||||
<User userId="3" username="jill" password="8cf37351b60f00084392043ce2e6256b96cea92949f90c7abce464cf164fbfa6">
|
||||
<Firstname>Jill</Firstname>
|
||||
<Lastname>Johnson</Lastname>
|
||||
<State>ENABLED</State>
|
||||
<Locale>en_GB</Locale>
|
||||
<Roles>
|
||||
<Role>OnlyGreetingServiceRole</Role>
|
||||
</Roles>
|
||||
|
||||
</User>
|
||||
<User userId="4" username="sysAdmin" password="8cffb494ef5ff3f74a571206e141d4fb84f833e431b98c8b3be43727c4cbddc1">
|
||||
<Firstname>System User</Firstname>
|
||||
<Lastname>Administrator</Lastname>
|
||||
<State>SYSTEM</State>
|
||||
<Locale>en_GB</Locale>
|
||||
<Roles>
|
||||
<Role>sysAdmin</Role>
|
||||
<Role>AppUser</Role>
|
||||
</Roles>
|
||||
|
||||
</User>
|
||||
</Users>
|
||||
|
||||
<Roles>
|
||||
|
||||
<Role name="PrivilegeAdmin" />
|
||||
|
||||
<Role name="agent">
|
||||
<Privilege name="li.strolch.agent.impl.StartRealms" policy="DefaultPrivilege">
|
||||
<AllAllowed>true</AllAllowed>
|
||||
</Privilege>
|
||||
</Role>
|
||||
|
||||
<Role name="AppUser">
|
||||
<Privilege name="li.strolch.service.api.Service" policy="DefaultPrivilege">
|
||||
<AllAllowed>true</AllAllowed>
|
||||
</Privilege>
|
||||
<Privilege name="li.strolch.model.query.StrolchQuery" policy="DefaultPrivilege">
|
||||
<AllAllowed>true</AllAllowed>
|
||||
</Privilege>
|
||||
</Role>
|
||||
|
||||
<Role name="sysAdmin">
|
||||
</Role>
|
||||
|
||||
<Role name="OnlyGreetingServiceRole">
|
||||
<Privilege name="li.strolch.service.api.Service" policy="DefaultPrivilege">
|
||||
<Allow>li.strolch.service.test.GreetingService</Allow>
|
||||
</Privilege>
|
||||
</Role>
|
||||
|
||||
</Roles>
|
||||
</UsersAndRoles>
|
|
@ -0,0 +1,63 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<StrolchConfiguration>
|
||||
<env id="dev">
|
||||
<Runtime>
|
||||
<applicationName>StrolchPersistenceTest</applicationName>
|
||||
<Properties>
|
||||
<verbose>true</verbose>
|
||||
</Properties>
|
||||
</Runtime>
|
||||
<Component>
|
||||
<name>PrivilegeHandler</name>
|
||||
<api>li.strolch.runtime.privilege.PrivilegeHandler</api>
|
||||
<impl>li.strolch.runtime.privilege.DefaultStrolchPrivilegeHandler</impl>
|
||||
<Properties>
|
||||
<privilegeConfigFile>PrivilegeConfig.xml</privilegeConfigFile>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component>
|
||||
<name>RealmHandler</name>
|
||||
<api>li.strolch.agent.api.RealmHandler</api>
|
||||
<impl>li.strolch.agent.impl.DefaultRealmHandler</impl>
|
||||
<depends>PrivilegeHandler</depends>
|
||||
<Properties>
|
||||
<dataStoreMode>TRANSIENT</dataStoreMode>
|
||||
<dataStoreFile>StrolchModel.xml</dataStoreFile>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component>
|
||||
<name>ServiceHandler</name>
|
||||
<api>li.strolch.service.api.ServiceHandler</api>
|
||||
<impl>li.strolch.service.api.DefaultServiceHandler</impl>
|
||||
<Properties>
|
||||
<verbose>true</verbose>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component>
|
||||
<name>RestfulHandler</name>
|
||||
<api>li.strolch.rest.RestfulStrolchComponent</api>
|
||||
<impl>li.strolch.rest.RestfulStrolchComponent</impl>
|
||||
<Properties>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component>
|
||||
<name>SessionHandler</name>
|
||||
<api>li.strolch.rest.StrolchSessionHandler</api>
|
||||
<impl>li.strolch.rest.DefaultStrolchSessionHandler</impl>
|
||||
<Properties>
|
||||
<rememberUser>true</rememberUser>
|
||||
</Properties>
|
||||
</Component>
|
||||
<Component>
|
||||
<name>EnumHandler</name>
|
||||
<api>li.strolch.runtime.query.enums.EnumHandler</api>
|
||||
<impl>li.strolch.runtime.query.enums.DefaultEnumHandler</impl>
|
||||
<depends>RealmHandler</depends>
|
||||
<Properties>
|
||||
<realm>defaultRealm</realm>
|
||||
<salutation>Resource/Enumeration/salutation</salutation>
|
||||
<sex>Resource/Enumeration/sex</sex>
|
||||
</Properties>
|
||||
</Component>
|
||||
</env>
|
||||
</StrolchConfiguration>
|
|
@ -0,0 +1,26 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<StrolchModel>
|
||||
|
||||
<Resource Id="salutation" Name="Salutations" Type="Enumeration">
|
||||
<ParameterBag Id="en" Name="Salutations" Type="Enumeration">
|
||||
<Parameter Id="mr" Name="Mr" Type="String" Value="Mr" />
|
||||
<Parameter Id="ms" Name="Ms" Type="String" Value="Ms" />
|
||||
<Parameter Id="mrs" Name="Mrs" Type="String" Value="Mrs" />
|
||||
</ParameterBag>
|
||||
<ParameterBag Id="de" Name="Salutations" Type="Enumeration">
|
||||
<Parameter Id="mr" Name="Mr" Type="String" Value="Herr" />
|
||||
<Parameter Id="ms" Name="Ms" Type="String" Value="Frau" />
|
||||
<Parameter Id="mrs" Name="Mrs" Type="String" Value="Frau" />
|
||||
</ParameterBag>
|
||||
</Resource>
|
||||
|
||||
<Resource Id="sex" Name="Sex" Type="Enumeration">
|
||||
<ParameterBag Id="en" Name="Sex" Type="Enumeration">
|
||||
<Parameter Id="undefined" Name="Undefined" Type="String" Value="undefined" />
|
||||
<Parameter Id="both" Name="Both" Type="String" Value="both" />
|
||||
<Parameter Id="female" Name="Female" Type="String" Value="female" />
|
||||
<Parameter Id="male" Name="Male" Type="String" Value="male" />
|
||||
</ParameterBag>
|
||||
</Resource>
|
||||
|
||||
</StrolchModel>
|
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<StrolchModel>
|
||||
<Order Id="MyTestOrder" Name="Test Name" Type="TestType" Date="2013-11-20T07:42:57.699+01:00" State="CREATED">
|
||||
<ParameterBag Id="@bag01" Name="Test Bag" Type="TestBag">
|
||||
<Parameter Id="@param7" Name="StringList Param" Type="StringList" Value="Hello;World" />
|
||||
<Parameter Id="@param6" Name="Date Param" Type="Date" Value="2012-11-30T18:12:05.628+01:00" />
|
||||
<Parameter Id="@param5" Name="String Param" Type="String" Value="Strolch" />
|
||||
<Parameter Id="@param4" Name="Long Param" Type="Long" Value="4453234566" />
|
||||
<Parameter Id="@param3" Name="Integer Param" Type="Integer" Value="77" />
|
||||
<Parameter Id="@param2" Name="Float Param" Type="Float" Value="44.3" />
|
||||
<Parameter Id="@param1" Name="Boolean Param" Type="Boolean" Value="true" />
|
||||
</ParameterBag>
|
||||
</Order>
|
||||
</StrolchModel>
|
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<StrolchModel>
|
||||
<Resource Id="MyTestResource" Name="Test Name" Type="TestType">
|
||||
<ParameterBag Id="@bag01" Name="Test Bag" Type="TestBag">
|
||||
<Parameter Id="@param7" Name="StringList Param" Type="StringList" Value="Hello;World" />
|
||||
<Parameter Id="@param6" Name="Date Param" Type="Date" Value="2012-11-30T18:12:05.628+01:00" />
|
||||
<Parameter Id="@param5" Name="String Param" Type="String" Value="Strolch" />
|
||||
<Parameter Id="@param4" Name="Long Param" Type="Long" Value="4453234566" />
|
||||
<Parameter Id="@param3" Name="Integer Param" Type="Integer" Value="77" />
|
||||
<Parameter Id="@param2" Name="Float Param" Type="Float" Value="44.3" />
|
||||
<Parameter Id="@param1" Name="Boolean Param" Type="Boolean" Value="true" />
|
||||
</ParameterBag>
|
||||
</Resource>
|
||||
</StrolchModel>
|
|
@ -0,0 +1,30 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<StrolchModel>
|
||||
<Resource Id="TestType" Name="TestType Template" Type="Template">
|
||||
<ParameterBag Id="@bag01" Name="Test Bag" Type="TestBag">
|
||||
<Parameter Id="@param7" Name="StringList Param" Type="StringList" Value="Hello;World" />
|
||||
<Parameter Id="@param6" Name="Date Param" Type="Date" Value="2012-11-30T18:12:05.628+01:00" />
|
||||
<Parameter Id="@param5" Name="String Param" Type="String" Value="Strolch" />
|
||||
<Parameter Id="@param4" Name="Long Param" Type="Long" Value="4453234566" />
|
||||
<Parameter Id="@param3" Name="Integer Param" Type="Integer" Value="77" />
|
||||
<Parameter Id="@param2" Name="Float Param" Type="Float" Value="44.3" />
|
||||
<Parameter Id="@param1" Name="Boolean Param" Type="Boolean" Value="true" />
|
||||
</ParameterBag>
|
||||
</Resource>
|
||||
<Order Id="TestType" Name="MyTestOrder Template" Type="Template" Date="2012-11-30T18:12:05.628+01:00">
|
||||
<ParameterBag Id="@bag01" Name="Test Bag" Type="TestBag">
|
||||
<Parameter Id="@param7" Name="StringList Param" Type="StringList" Value="Hello;World" />
|
||||
<Parameter Id="@param6" Name="Date Param" Type="Date" Value="2012-11-30T18:12:05.628+01:00" />
|
||||
<Parameter Id="@param5" Name="String Param" Type="String" Value="Strolch" />
|
||||
<Parameter Id="@param4" Name="Long Param" Type="Long" Value="4453234566" />
|
||||
<Parameter Id="@param3" Name="Integer Param" Type="Integer" Value="77" />
|
||||
<Parameter Id="@param2" Name="Float Param" Type="Float" Value="44.3" />
|
||||
<Parameter Id="@param1" Name="Boolean Param" Type="Boolean" Value="true" />
|
||||
</ParameterBag>
|
||||
</Order>
|
||||
|
||||
<IncludeFile file="Resources.xml" />
|
||||
<IncludeFile file="Orders.xml" />
|
||||
<IncludeFile file="Enums.xml" />
|
||||
|
||||
</StrolchModel>
|
Loading…
Reference in New Issue