Initial import (partially)
72
org.migor.core/pom.xml
Normal file
@@ -0,0 +1,72 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<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>org.migor.server</groupId>
|
||||
<artifactId>org.migor.server</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>org.migor.core</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<dependencies>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.codehaus.jackson</groupId>
|
||||
<artifactId>jackson-jaxrs</artifactId>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>commons-validator</groupId>
|
||||
<artifactId>commons-validator</artifactId>
|
||||
<version>1.4.0</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.migor.server</groupId>
|
||||
<artifactId>org.migor.shared</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>2.3.1</version>
|
||||
<configuration>
|
||||
<source>1.6</source>
|
||||
<target>1.6</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>buildnumber-maven-plugin</artifactId>
|
||||
<version>1.2</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>validate</phase>
|
||||
<goals>
|
||||
<goal>create</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
<configuration>
|
||||
<format>{0,date,yyyyMMddHHmmss}</format>
|
||||
<items>
|
||||
<item>timestamp</item>
|
||||
<doCheck>false</doCheck>
|
||||
<doUpdate>false</doUpdate>
|
||||
</items>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
||||
@@ -0,0 +1,26 @@
|
||||
package org.migor.core;
|
||||
|
||||
import org.migor.shared.StatusCode;
|
||||
|
||||
/**
|
||||
* @author Daniel Scheidle
|
||||
* @since 11/4/13 11:03 PM
|
||||
*/
|
||||
public class MigorException extends Exception {
|
||||
|
||||
private StatusCode status = StatusCode.ERROR;
|
||||
|
||||
public MigorException(String message, Throwable cause, StatusCode status) {
|
||||
super(message, cause);
|
||||
this.status = status;
|
||||
}
|
||||
|
||||
public MigorException(String message, StatusCode status) {
|
||||
super(message);
|
||||
this.status = status;
|
||||
}
|
||||
|
||||
public StatusCode getStatus() {
|
||||
return status;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package org.migor.core.bootstrap;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import javax.annotation.PreDestroy;
|
||||
import javax.ejb.Singleton;
|
||||
import javax.ejb.Startup;
|
||||
|
||||
/**
|
||||
* @author Daniel Scheidle
|
||||
* @since 11/4/13 11:22 PM
|
||||
*/
|
||||
@SuppressWarnings("UnusedDeclaration")
|
||||
@Startup
|
||||
@Singleton
|
||||
public class StartUp {
|
||||
|
||||
private static final Logger logger = Logger.getLogger(StartUp.class);
|
||||
|
||||
@PostConstruct
|
||||
public void postConstruct() {
|
||||
logger.info("Started");
|
||||
}
|
||||
|
||||
@PreDestroy
|
||||
public void preDestroy() {
|
||||
logger.info("Destroyed");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
package org.migor.core.utils;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.enterprise.context.spi.CreationalContext;
|
||||
import javax.enterprise.inject.spi.AnnotatedType;
|
||||
import javax.enterprise.inject.spi.BeanManager;
|
||||
import javax.enterprise.inject.spi.InjectionTarget;
|
||||
import javax.naming.InitialContext;
|
||||
import javax.naming.NamingException;
|
||||
|
||||
|
||||
/**
|
||||
* 05.07.13 15:09
|
||||
*
|
||||
* @author Daniel Scheidle
|
||||
* daniel.scheidle@ucs.at
|
||||
* Unique Computing Solutions GmbH
|
||||
*/
|
||||
public class BeanUtils {
|
||||
|
||||
public static final String JNDI_BEAN_MANAGER = "java:comp/BeanManager";
|
||||
|
||||
/**
|
||||
* This method does NOT work on interfaces.
|
||||
*
|
||||
* @param instanceClass the bean class.
|
||||
* @param <T> generic type of the bean.
|
||||
* @return injected bean.
|
||||
* @throws javax.naming.NamingException if lookup for the BeanManager fails
|
||||
*/
|
||||
@SuppressWarnings( "unchecked" )
|
||||
public static <T> T get(@NotNull final Class<T> instanceClass) throws NamingException {
|
||||
BeanManager beanManager = getBeanManager();
|
||||
|
||||
AnnotatedType<Object> annotatedType = (AnnotatedType<Object>) beanManager.createAnnotatedType(instanceClass);
|
||||
InjectionTarget<Object> injectionTarget = beanManager.createInjectionTarget(annotatedType);
|
||||
CreationalContext<Object> context = beanManager.createCreationalContext(null);
|
||||
Object instance = injectionTarget.produce(context);
|
||||
injectionTarget.inject(instance, context);
|
||||
injectionTarget.postConstruct( instance );
|
||||
|
||||
return (T) instance;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return BeanManager
|
||||
* @throws javax.naming.NamingException
|
||||
*/
|
||||
@NotNull
|
||||
public static BeanManager getBeanManager() throws NamingException {
|
||||
return InitialContext.doLookup(JNDI_BEAN_MANAGER);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
122
org.migor.core/src/main/java/org/migor/core/utils/ZipUtils.java
Normal file
@@ -0,0 +1,122 @@
|
||||
package org.migor.core.utils;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.io.*;
|
||||
import java.util.zip.GZIPInputStream;
|
||||
import java.util.zip.GZIPOutputStream;
|
||||
|
||||
/**
|
||||
* The type Zip utils.
|
||||
* @author Daniel Scheidle
|
||||
* daniel.scheidle@ucs.at
|
||||
* Unique Computing Solutions GmbH
|
||||
*/
|
||||
public class ZipUtils {
|
||||
|
||||
private ZipUtils() {
|
||||
// utils class --> no constructor needed
|
||||
}
|
||||
|
||||
/**
|
||||
* Compress byte [ ].
|
||||
*
|
||||
* @param bytes the bytes
|
||||
* @return the byte [ ]
|
||||
* @throws Exception the exception
|
||||
*/
|
||||
public static byte[] compress(@NotNull final byte[] bytes) throws Exception {
|
||||
|
||||
ByteArrayInputStream inputStream = null;
|
||||
ByteArrayOutputStream outputStream = null;
|
||||
try {
|
||||
inputStream = new ByteArrayInputStream(bytes);
|
||||
outputStream = new ByteArrayOutputStream();
|
||||
compress(inputStream, outputStream);
|
||||
return outputStream.toByteArray();
|
||||
}
|
||||
catch(Exception e) {
|
||||
throw new Exception(e.getMessage(), e);
|
||||
} finally {
|
||||
if (outputStream != null) outputStream.close();
|
||||
if (inputStream != null) inputStream.close();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Decompress byte [ ].
|
||||
*
|
||||
* @param bytes the bytes
|
||||
* @return the byte [ ]
|
||||
* @throws Exception the exception
|
||||
*/
|
||||
public static byte[] decompress(@NotNull final byte[] bytes) throws Exception {
|
||||
|
||||
ByteArrayInputStream inputStream = null;
|
||||
ByteArrayOutputStream outputStream = null;
|
||||
try {
|
||||
inputStream = new ByteArrayInputStream(bytes);
|
||||
outputStream = new ByteArrayOutputStream();
|
||||
decompress(inputStream, outputStream);
|
||||
return outputStream.toByteArray();
|
||||
}
|
||||
catch(Exception e) {
|
||||
throw new Exception(e.getMessage(), e);
|
||||
} finally {
|
||||
if (outputStream != null) outputStream.close();
|
||||
if (inputStream != null) inputStream.close();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Compress void.
|
||||
*
|
||||
* @param inputStream the input stream
|
||||
* @param outputStream the output stream
|
||||
* @throws java.io.IOException the iO exception
|
||||
*/
|
||||
public static void compress(@NotNull final InputStream inputStream,
|
||||
@NotNull final OutputStream outputStream) throws IOException {
|
||||
|
||||
GZIPOutputStream gzipOutputStream = null;
|
||||
try {
|
||||
gzipOutputStream = new GZIPOutputStream(outputStream);
|
||||
|
||||
int count;
|
||||
byte[] buffer = new byte[1024];
|
||||
while ((count = inputStream.read(buffer)) > 0) {
|
||||
gzipOutputStream.write(buffer, 0, count);
|
||||
}
|
||||
} finally {
|
||||
if (gzipOutputStream != null) gzipOutputStream.close();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Decompress void.
|
||||
*
|
||||
* @param inputStream the input stream
|
||||
* @param outputStream the output stream
|
||||
* @throws java.io.IOException the iO exception
|
||||
*/
|
||||
public static void decompress(@NotNull final InputStream inputStream,
|
||||
@NotNull final OutputStream outputStream) throws IOException {
|
||||
|
||||
GZIPInputStream gzipInputStream = null;
|
||||
try {
|
||||
gzipInputStream = new GZIPInputStream(inputStream);
|
||||
|
||||
int count;
|
||||
byte[] buffer = new byte[1024];
|
||||
while ((count = gzipInputStream.read(buffer)) > 0) {
|
||||
outputStream.write(buffer, 0, count);
|
||||
}
|
||||
} finally {
|
||||
if (gzipInputStream != null) gzipInputStream.close();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
12
org.migor.core/src/main/resources/META-INF/beans.xml
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- This file can be an empty text file (0 bytes) -->
|
||||
<!-- We're declaring the schema to save you time if you do have to configure
|
||||
this in the future -->
|
||||
<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="
|
||||
http://java.sun.com/xml/ns/javaee
|
||||
http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
|
||||
<interceptors>
|
||||
|
||||
</interceptors>
|
||||
</beans>
|
||||
75
org.migor.service/pom.xml
Normal file
@@ -0,0 +1,75 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<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>
|
||||
<artifactId>org.migor.server</artifactId>
|
||||
<groupId>org.migor.server</groupId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
|
||||
<artifactId>org.migor.service</artifactId>
|
||||
<packaging>war</packaging>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.jboss.resteasy</groupId>
|
||||
<artifactId>resteasy-jsapi</artifactId>
|
||||
<version>2.3.2.Final</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.codehaus.jackson</groupId>
|
||||
<artifactId>jackson-jaxrs</artifactId>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>javax.websocket</groupId>
|
||||
<artifactId>javax.websocket-api</artifactId>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.migor.server</groupId>
|
||||
<artifactId>org.migor.core</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<finalName>${project.artifactId}-${project.version}.war</finalName>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-war-plugin</artifactId>
|
||||
<version>2.3</version>
|
||||
<configuration>
|
||||
<failOnMissingWebXml>true</failOnMissingWebXml>
|
||||
<webResources>
|
||||
<resource>
|
||||
<directory>src/main/webapp</directory>
|
||||
<filtering>true</filtering>
|
||||
<includes>
|
||||
<include>**/*.xml</include>
|
||||
</includes>
|
||||
</resource>
|
||||
</webResources>
|
||||
<archive>
|
||||
<manifest>
|
||||
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
|
||||
</manifest>
|
||||
<manifestEntries>
|
||||
<!--suppress MavenModelInspection -->
|
||||
<Implementation-Build>${buildNumber}</Implementation-Build>
|
||||
</manifestEntries>
|
||||
</archive>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
||||
@@ -0,0 +1,20 @@
|
||||
package org.migor.service;
|
||||
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
|
||||
/**
|
||||
* @author Daniel Scheidle
|
||||
* @since 11/23/13 3:35 PM
|
||||
*/
|
||||
@Path("/ping")
|
||||
public class PingService {
|
||||
|
||||
@GET
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public Response ping() {
|
||||
return Response.ok();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
package org.migor.service;
|
||||
|
||||
import org.codehaus.jackson.annotate.JsonProperty;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.migor.shared.StatusCode;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @author Daniel Scheidle
|
||||
* @since 11/4/13 10:21 PM
|
||||
*/
|
||||
public class Response {
|
||||
|
||||
@JsonProperty("status")
|
||||
public int status;
|
||||
|
||||
@JsonProperty("message")
|
||||
public String message;
|
||||
|
||||
//TODO format with timezone
|
||||
@JsonProperty("timestamp")
|
||||
public Date timestamp = new Date();
|
||||
|
||||
@JsonProperty("content")
|
||||
public Object content;
|
||||
|
||||
|
||||
protected Response(@NotNull final StatusCode status,
|
||||
@Nullable final String message,
|
||||
@Nullable final Object content) {
|
||||
this.status = status.getCode();
|
||||
this.message = message;
|
||||
this.content = content;
|
||||
}
|
||||
|
||||
public static Response ok() {
|
||||
return new Response(StatusCode.OK, null, null);
|
||||
}
|
||||
|
||||
public static Response ok(@NotNull final Object content) {
|
||||
return new Response(StatusCode.OK, null, content);
|
||||
}
|
||||
|
||||
public static Response error(@NotNull final String message) {
|
||||
return new Response(StatusCode.ERROR, message, null);
|
||||
}
|
||||
|
||||
public int getStatus() {
|
||||
return status;
|
||||
}
|
||||
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
|
||||
public Date getTimestamp() {
|
||||
return timestamp;
|
||||
}
|
||||
|
||||
public Object getContent() {
|
||||
return content;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package org.migor.service.configuration;
|
||||
|
||||
import org.codehaus.jackson.map.ObjectMapper;
|
||||
import org.codehaus.jackson.map.SerializationConfig;
|
||||
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.ext.ContextResolver;
|
||||
import javax.ws.rs.ext.Provider;
|
||||
import java.text.SimpleDateFormat;
|
||||
|
||||
/**
|
||||
* @author Daniel Scheidle
|
||||
* @since 11/7/13 8:15 PM
|
||||
*/
|
||||
@Provider
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public class JsonConfiguration implements ContextResolver<ObjectMapper>
|
||||
{
|
||||
private final ObjectMapper objectMapper;
|
||||
|
||||
|
||||
public JsonConfiguration() throws Exception
|
||||
{
|
||||
this.objectMapper = new ObjectMapper();
|
||||
|
||||
this.objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"));
|
||||
this.objectMapper.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false);
|
||||
}
|
||||
|
||||
|
||||
public ObjectMapper getContext(Class<?> objectType)
|
||||
{
|
||||
return objectMapper;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package org.migor.service.configuration;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
import org.migor.core.MigorException;
|
||||
|
||||
import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.ext.ExceptionMapper;
|
||||
import javax.ws.rs.ext.Provider;
|
||||
|
||||
/**
|
||||
* @author Daniel Scheidle, daniel.scheidle@ucs.at
|
||||
* 15:49, 09.07.12
|
||||
*/
|
||||
@Provider
|
||||
public class JsonExceptionMapper implements ExceptionMapper<Throwable> {
|
||||
|
||||
private static final Logger logger = Logger.getLogger(JsonExceptionMapper.class);
|
||||
|
||||
@Override
|
||||
public Response toResponse(Throwable throwable) {
|
||||
|
||||
if (throwable instanceof MigorException) {
|
||||
logger.error(throwable.getMessage(), throwable);
|
||||
} else {
|
||||
logger.fatal(throwable.getMessage(), throwable);
|
||||
}
|
||||
|
||||
return Response.serverError().build();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
package org.migor.service.configuration;
|
||||
|
||||
|
||||
import javax.ws.rs.ApplicationPath;
|
||||
import javax.ws.rs.core.Application;
|
||||
|
||||
/**
|
||||
* @author Daniel Scheidle
|
||||
* @since 11/4/13 10:20 PM
|
||||
*/
|
||||
@ApplicationPath("/rest")
|
||||
public class ServiceApplication extends Application {
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package org.migor.service.listeners;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
|
||||
import javax.servlet.http.HttpSessionEvent;
|
||||
import javax.servlet.http.HttpSessionListener;
|
||||
|
||||
/**
|
||||
* @author Daniel Scheidle
|
||||
* @since 11/6/13 8:35 PM
|
||||
*/
|
||||
public class SessionListener implements HttpSessionListener {
|
||||
|
||||
private static final Logger logger = Logger.getLogger(SessionListener.class);
|
||||
|
||||
|
||||
@Override
|
||||
public void sessionCreated(HttpSessionEvent se) {
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("Created session " + se.getSession().getId());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sessionDestroyed(HttpSessionEvent se) {
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("Destroyed session " + se.getSession().getId());
|
||||
}
|
||||
}
|
||||
}
|
||||
10
org.migor.service/src/main/webapp/WEB-INF/beans.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="
|
||||
http://java.sun.com/xml/ns/javaee
|
||||
http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
|
||||
|
||||
<interceptors>
|
||||
|
||||
</interceptors>
|
||||
</beans>
|
||||
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<jboss-deployment-structure>
|
||||
<deployment>
|
||||
<dependencies>
|
||||
<module name="org.infinispan"/>
|
||||
</dependencies>
|
||||
</deployment>
|
||||
</jboss-deployment-structure>
|
||||
3
org.migor.service/src/main/webapp/WEB-INF/jboss-web.xml
Normal file
@@ -0,0 +1,3 @@
|
||||
<jboss-web>
|
||||
<context-root>/migor/services</context-root>
|
||||
</jboss-web>
|
||||
30
org.migor.service/src/main/webapp/WEB-INF/web.xml
Normal file
@@ -0,0 +1,30 @@
|
||||
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
|
||||
<distributable/>
|
||||
|
||||
<session-config>
|
||||
<session-timeout>5</session-timeout>
|
||||
</session-config>
|
||||
|
||||
<listener>
|
||||
<listener-class>org.migor.service.listeners.SessionListener</listener-class>
|
||||
</listener>
|
||||
|
||||
<listener>
|
||||
<listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
|
||||
</listener>
|
||||
|
||||
|
||||
|
||||
<!-- RESTeasy Servlet for generating js client stubs -->
|
||||
<servlet>
|
||||
<servlet-name>RESTEasy JSAPI</servlet-name>
|
||||
<servlet-class>org.jboss.resteasy.jsapi.JSAPIServlet</servlet-class>
|
||||
</servlet>
|
||||
|
||||
<servlet-mapping>
|
||||
<servlet-name>RESTEasy JSAPI</servlet-name>
|
||||
<url-pattern>/rest/js</url-pattern>
|
||||
</servlet-mapping>
|
||||
</web-app>
|
||||
8
org.migor.service/src/main/webapp/index.html
Normal file
@@ -0,0 +1,8 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
<head>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=8">
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
||||
15
org.migor.shared/pom.xml
Normal file
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<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">
|
||||
<parent>
|
||||
<artifactId>org.migor.server</artifactId>
|
||||
<groupId>org.migor.server</groupId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>org.migor.shared</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
</project>
|
||||
136
org.migor.shared/src/main/java/org/migor/shared/McctxId.java
Normal file
@@ -0,0 +1,136 @@
|
||||
package org.migor.shared;
|
||||
|
||||
import com.eaio.uuid.UUID;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.net.InetAddress;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @author Daniel Scheidle
|
||||
* @since 11/4/13 10:24 PM
|
||||
*/
|
||||
@SuppressWarnings("UnusedDeclaration")
|
||||
public class McctxId {
|
||||
|
||||
private static final Logger logger = Logger.getLogger(McctxId.class);
|
||||
|
||||
private static final String ENV_KEY_BIND_ADDRESS = "jboss.bind.address";
|
||||
|
||||
private static final long MAX_HEADER_LEN = 2048;
|
||||
|
||||
private McctxId() {
|
||||
// util class, no constructor needed
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets bind address.
|
||||
*
|
||||
* @return the bind address
|
||||
*/
|
||||
@NotNull
|
||||
public static String getBindAddress() {
|
||||
String ip = System.getProperty(ENV_KEY_BIND_ADDRESS);
|
||||
try {
|
||||
return StringUtils.isBlank(ip) ? InetAddress.getLocalHost().getHostName() : ip;
|
||||
} catch (Exception e) {
|
||||
return "localhost";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Add UUID to thread name.
|
||||
*
|
||||
* @param u the u
|
||||
*/
|
||||
public static void addUUIDToThreadName(@NotNull final String u) {
|
||||
Thread thread = Thread.currentThread();
|
||||
|
||||
if (StringUtils.indexOf(thread.getName(), "|") != -1) {
|
||||
removeUUIDFromThreadName();
|
||||
}
|
||||
|
||||
thread.setName(thread.getName() +"|"+ u);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove UUID from thread name.
|
||||
*/
|
||||
public static void removeUUIDFromThreadName() {
|
||||
final Thread temp = Thread.currentThread();
|
||||
final String currentName = temp.getName();
|
||||
temp.setName(currentName.substring(0, currentName.length()-37));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Create uUID.
|
||||
*
|
||||
* @return the uUID
|
||||
*/
|
||||
@NotNull
|
||||
public static String create() {
|
||||
return new UUID().toString();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Create UUID.
|
||||
*
|
||||
* @param currentUUID the current uUID
|
||||
* @return the uUID
|
||||
*/
|
||||
@NotNull
|
||||
public static UUID create(@Nullable final String currentUUID) {
|
||||
if (!StringUtils.isBlank(currentUUID)) {
|
||||
return new UUID(currentUUID);
|
||||
} else {
|
||||
return new UUID();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create path.
|
||||
*
|
||||
* @return the string
|
||||
*/
|
||||
@NotNull
|
||||
public static String createPath() {
|
||||
return addPath(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add path.
|
||||
*
|
||||
* @param currentPath the current path
|
||||
* @return the string
|
||||
*/
|
||||
@NotNull
|
||||
public static String addPath(@Nullable final String currentPath) {
|
||||
|
||||
String path = "";
|
||||
if (!StringUtils.isBlank(currentPath)) {
|
||||
path += StringUtils.trim(currentPath) + ";";
|
||||
}
|
||||
|
||||
path += getBindAddress() + "," + new Date().getTime();
|
||||
try {
|
||||
while (path.length() > MAX_HEADER_LEN) {
|
||||
path = StringUtils.substring(path, path.indexOf(";") + 1, path.length()-1);
|
||||
|
||||
if (logger.isDebugEnabled())
|
||||
logger.debug("Host removed - new path: " + path);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
logger.warn("Given path could not be shortened due to incorrect formatting");
|
||||
path = path + "," + new Date().getTime();
|
||||
}
|
||||
return path;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package org.migor.shared;
|
||||
|
||||
/**
|
||||
* @author Daniel Scheidle
|
||||
* @since 11/4/13 10:24 PM
|
||||
*/
|
||||
public enum StatusCode {
|
||||
|
||||
OK(0),
|
||||
ERROR(1),
|
||||
PERMISSION_DENIED(2);
|
||||
|
||||
private int code;
|
||||
|
||||
private StatusCode(int code) {
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
public int getCode() {
|
||||
return code;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,109 @@
|
||||
package org.migor.shared.parser;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.lang.reflect.Array;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @author Daniel Scheidle
|
||||
* @since 11/4/13 10:46 PM
|
||||
*/
|
||||
public class GenericParser {
|
||||
|
||||
public static final String DEFAULT_DATE_FORMAT_PATTERN = "yyyy-MM-dd HH:mm:ss";
|
||||
public static final String DEFAULT_ARRAY_DELIMITER = ",";
|
||||
|
||||
|
||||
private static String dateFormatPattern = GenericParser.DEFAULT_DATE_FORMAT_PATTERN;
|
||||
private static String arrayDelimiter = DEFAULT_ARRAY_DELIMITER;
|
||||
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static <T> T parse(Class<T> clazz, String value) throws ParseException {
|
||||
try {
|
||||
if (StringUtils.isEmpty(value)) {
|
||||
return null;
|
||||
} else if (clazz.isPrimitive()) {
|
||||
if (clazz.toString().equals("float")) {
|
||||
return (T)Float.valueOf(value);
|
||||
} else if (clazz.toString().equals("double")) {
|
||||
return (T)Double.valueOf(value);
|
||||
} else if (clazz.toString().equals("long")) {
|
||||
return (T)Long.valueOf(value);
|
||||
} else if (clazz.toString().equals("int")) {
|
||||
return (T)Integer.valueOf(value);
|
||||
} else if (clazz.toString().equals("boolean")) {
|
||||
return (T)Boolean.valueOf(value);
|
||||
}
|
||||
} else if (clazz.equals(Boolean.class)) {
|
||||
return (T)Boolean.valueOf(value);
|
||||
} else if (clazz.equals(Long.class)) {
|
||||
return (T)Long.valueOf(value);
|
||||
} else if (clazz.equals(Integer.class)) {
|
||||
return (T)Integer.valueOf(value);
|
||||
} else if (clazz.equals(Double.class)) {
|
||||
return (T)Double.valueOf(value);
|
||||
} else if (clazz.equals( Float.class )) {
|
||||
return (T)Float.valueOf(value);
|
||||
} else if (clazz.equals( Date.class )) {
|
||||
try {
|
||||
return (T)(new SimpleDateFormat(getDateFormatPattern()).parse(value));
|
||||
} catch (Exception t) {
|
||||
throw new RuntimeException("Failed to parse date: " + t.getMessage());
|
||||
}
|
||||
} else if (clazz.isEnum()) {
|
||||
Object[] defined_values = clazz.getEnumConstants();
|
||||
for (Object t : defined_values) {
|
||||
if (t.toString().equalsIgnoreCase(value)) {
|
||||
return (T)t;
|
||||
}
|
||||
}
|
||||
throw new RuntimeException("Unable to convert: Defined value "+value+" is not an option of "+clazz.toString());
|
||||
} else if (clazz.isAssignableFrom(Parsable.class)) {
|
||||
return (T) ((Parsable) clazz.newInstance()).parse(value);
|
||||
} else if (clazz.isAssignableFrom(String.class)) {
|
||||
return (T)value;
|
||||
}
|
||||
|
||||
throw new ParseException("Type can not by cast by this method: "+clazz.toString());
|
||||
} catch (ParseException e) {
|
||||
throw e;
|
||||
} catch (Exception t) {
|
||||
throw new ParseException(t.getMessage(), t);
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings( "unchecked" )
|
||||
public static <T> T[] parseArray(Class<T> clazz, String value) throws ParseException {
|
||||
try {
|
||||
String[] values = value.split(getArrayDelimiter());
|
||||
|
||||
T[] array = (T[]) Array.newInstance(clazz, values.length);
|
||||
|
||||
for (int pos = 0; pos < values.length; pos++) {
|
||||
array[pos] = parse(clazz, values[pos]);
|
||||
}
|
||||
return array;
|
||||
} catch (Exception t) {
|
||||
throw new ParseException(t.getMessage(), t);
|
||||
}
|
||||
}
|
||||
|
||||
public static String getDateFormatPattern() {
|
||||
return dateFormatPattern;
|
||||
}
|
||||
|
||||
public static void setDateFormatPattern( final String newDateFormatPattern ) {
|
||||
dateFormatPattern = newDateFormatPattern;
|
||||
}
|
||||
|
||||
public static String getArrayDelimiter() {
|
||||
return arrayDelimiter;
|
||||
}
|
||||
|
||||
public static void setArrayDelimiter( final String newArrayDelimiter ) {
|
||||
arrayDelimiter = newArrayDelimiter;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package org.migor.shared.parser;
|
||||
|
||||
/**
|
||||
* @author Daniel Scheidle
|
||||
* @since 11/4/13 10:50 PM
|
||||
*/
|
||||
public interface Parsable<T> {
|
||||
|
||||
public T parse(final String string) throws ParseException;
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package org.migor.shared.parser;
|
||||
|
||||
/**
|
||||
* @author Daniel Scheidle
|
||||
* @since 11/4/13 10:20 PM
|
||||
*/
|
||||
public class ParseException extends Exception {
|
||||
|
||||
public ParseException(final String message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
public ParseException(final String message, final Throwable cause) {
|
||||
super(message, cause);
|
||||
}
|
||||
}
|
||||
98
org.migor.webclient.admin/pom.xml
Normal file
@@ -0,0 +1,98 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<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">
|
||||
<parent>
|
||||
<artifactId>org.migor.server</artifactId>
|
||||
<groupId>org.migor.server</groupId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>org.migor.webclient.admin</artifactId>
|
||||
<packaging>war</packaging>
|
||||
|
||||
<build>
|
||||
<finalName>${project.artifactId}-${project.version}.war</finalName>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-war-plugin</artifactId>
|
||||
<version>2.3</version>
|
||||
<configuration>
|
||||
<failOnMissingWebXml>true</failOnMissingWebXml>
|
||||
<webResources>
|
||||
<resource>
|
||||
<directory>src/main/webapp</directory>
|
||||
<filtering>true</filtering>
|
||||
<includes>
|
||||
<include>**/*.xml</include>
|
||||
</includes>
|
||||
</resource>
|
||||
</webResources>
|
||||
<archive>
|
||||
<manifest>
|
||||
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
|
||||
</manifest>
|
||||
<manifestEntries>
|
||||
<!--suppress MavenModelInspection -->
|
||||
<Implementation-Build>${buildNumber}</Implementation-Build>
|
||||
</manifestEntries>
|
||||
</archive>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>com.samaxes.maven</groupId>
|
||||
<artifactId>minify-maven-plugin</artifactId>
|
||||
<version>1.6</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>default-minify</id>
|
||||
<phase>process-resources</phase>
|
||||
<configuration>
|
||||
<charset>utf-8</charset>
|
||||
<jsEngine>closure</jsEngine>
|
||||
|
||||
<!--CSS-->
|
||||
<cssSourceDir>css</cssSourceDir>
|
||||
<cssSourceFiles>
|
||||
<cssSourceFile>migor.css</cssSourceFile>
|
||||
<cssSourceFile>jquery-ui-1.10.3.custom.css</cssSourceFile>
|
||||
<cssSourceFile>jquery.dataTables_themeroller.css</cssSourceFile>
|
||||
<cssSourceFile>jquery.cleditor.css</cssSourceFile>
|
||||
</cssSourceFiles>
|
||||
<cssFinalFile>migor-comb.css</cssFinalFile>
|
||||
|
||||
<!--JS-->
|
||||
<jsSourceDir>js</jsSourceDir>
|
||||
<jsSourceFiles>
|
||||
<jsSourceFile>widgets/widget-geoLocation.js</jsSourceFile>
|
||||
<jsSourceFile>widgets/widget-components.js</jsSourceFile>
|
||||
<jsSourceFile>widgets/widget-titleBar.js</jsSourceFile>
|
||||
<jsSourceFile>widgets/widget-menuBar.js</jsSourceFile>
|
||||
<jsSourceFile>widgets/widget-form.js</jsSourceFile>
|
||||
<jsSourceFile>widgets/widget-map.js</jsSourceFile>
|
||||
|
||||
|
||||
<jsSourceFile>config.js</jsSourceFile>
|
||||
<jsSourceFile>utils.js</jsSourceFile>
|
||||
<jsSourceFile>init.js</jsSourceFile>
|
||||
<jsSourceFile>rest.js</jsSourceFile>
|
||||
<jsSourceFile>dialogs.js</jsSourceFile>
|
||||
|
||||
<jsSourceFile>pages/page-customerConfiguration.js</jsSourceFile>
|
||||
<jsSourceFile>pages/page-cacheEntries.js</jsSourceFile>
|
||||
<jsSourceFile>pages/page-nodeStatus.js</jsSourceFile>
|
||||
<jsSourceFile>pages/page-locationEntries.js</jsSourceFile>
|
||||
</jsSourceFiles>
|
||||
<jsFinalFile>migor-comb.js</jsFinalFile>
|
||||
</configuration>
|
||||
<goals>
|
||||
<goal>minify</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="
|
||||
http://java.sun.com/xml/ns/javaee
|
||||
http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
|
||||
|
||||
|
||||
</beans>
|
||||
@@ -0,0 +1,3 @@
|
||||
<jboss-web>
|
||||
<context-root>migor/admin</context-root>
|
||||
</jboss-web>
|
||||
@@ -0,0 +1,6 @@
|
||||
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
|
||||
<distributable/>
|
||||
|
||||
</web-app>
|
||||
|
After Width: | Height: | Size: 1.7 KiB |
BIN
org.migor.webclient.admin/src/main/webapp/css/images/buttons.gif
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
|
After Width: | Height: | Size: 55 B |
BIN
org.migor.webclient.admin/src/main/webapp/css/images/icons.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
org.migor.webclient.admin/src/main/webapp/css/images/resize.gif
Normal file
|
After Width: | Height: | Size: 78 B |
BIN
org.migor.webclient.admin/src/main/webapp/css/images/toolbar.gif
Normal file
|
After Width: | Height: | Size: 68 B |
|
After Width: | Height: | Size: 415 B |
|
After Width: | Height: | Size: 413 B |
|
After Width: | Height: | Size: 207 B |
|
After Width: | Height: | Size: 220 B |
|
After Width: | Height: | Size: 212 B |
|
After Width: | Height: | Size: 208 B |
|
After Width: | Height: | Size: 230 B |
|
After Width: | Height: | Size: 208 B |
|
After Width: | Height: | Size: 335 B |
|
After Width: | Height: | Size: 333 B |
|
After Width: | Height: | Size: 207 B |
|
After Width: | Height: | Size: 332 B |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 251 B |
|
After Width: | Height: | Size: 252 B |
|
After Width: | Height: | Size: 336 B |
|
After Width: | Height: | Size: 251 B |
|
After Width: | Height: | Size: 321 B |
|
After Width: | Height: | Size: 328 B |
|
After Width: | Height: | Size: 335 B |
|
After Width: | Height: | Size: 322 B |
|
After Width: | Height: | Size: 251 B |
|
After Width: | Height: | Size: 252 B |
|
After Width: | Height: | Size: 203 B |
|
After Width: | Height: | Size: 353 B |
|
After Width: | Height: | Size: 277 B |
|
After Width: | Height: | Size: 351 B |
|
After Width: | Height: | Size: 349 B |
|
After Width: | Height: | Size: 5.2 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 6.8 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 6.8 KiB |
|
After Width: | Height: | Size: 6.8 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 6.8 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 6.8 KiB |
|
After Width: | Height: | Size: 6.2 KiB |
1176
org.migor.webclient.admin/src/main/webapp/css/jquery-ui-1.10.3.custom.css
vendored
Normal file
5
org.migor.webclient.admin/src/main/webapp/css/jquery-ui-1.10.3.custom.min.css
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
.cleditorMain {border:1px solid #999; padding:0 1px 1px; background-color:white}
|
||||
.cleditorMain iframe {border:none; margin:0; padding:0}
|
||||
.cleditorMain textarea {border:none; margin:0; padding:0; overflow-y:scroll; font:10pt Arial,Verdana; resize:none; outline:none /* webkit grip focus */}
|
||||
.cleditorToolbar {background: url('images/toolbar.gif') repeat}
|
||||
.cleditorGroup {float:left; height:26px}
|
||||
.cleditorButton {float:left; width:24px; height:24px; margin:1px 0 1px 0; background: url('images/buttons.gif')}
|
||||
.cleditorDisabled {opacity:0.3; filter:alpha(opacity=30)}
|
||||
.cleditorDivider {float:left; width:1px; height:23px; margin:1px 0 1px 0; background:#CCC}
|
||||
.cleditorPopup {border:solid 1px #999; background-color:white; color:#333333; position:absolute; font:10pt Arial,Verdana; cursor:default; z-index:10000}
|
||||
.cleditorList div {padding:2px 4px 2px 4px}
|
||||
.cleditorList p,
|
||||
.cleditorList h1,
|
||||
.cleditorList h2,
|
||||
.cleditorList h3,
|
||||
.cleditorList h4,
|
||||
.cleditorList h5,
|
||||
.cleditorList h6,
|
||||
.cleditorList font {padding:0; margin:0; background-color:Transparent}
|
||||
.cleditorColor {width:150px; padding:1px 0 0 1px}
|
||||
.cleditorColor div {float:left; width:14px; height:14px; margin:0 1px 1px 0}
|
||||
.cleditorPrompt {background-color:#F6F7F9; padding:4px; font-size:8.5pt}
|
||||
.cleditorPrompt input,
|
||||
.cleditorPrompt textarea {font:8.5pt Arial,Verdana;}
|
||||
.cleditorMsg {background-color:#FDFCEE; width:150px; padding:4px; font-size:8.5pt}
|
||||
@@ -0,0 +1,244 @@
|
||||
|
||||
|
||||
/*
|
||||
* Table
|
||||
*/
|
||||
table.dataTable {
|
||||
margin: 0 auto;
|
||||
clear: both;
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
table.dataTable thead th {
|
||||
padding: 3px 0px 3px 10px;
|
||||
cursor: pointer;
|
||||
*cursor: hand;
|
||||
}
|
||||
|
||||
table.dataTable tfoot th {
|
||||
padding: 3px 10px;
|
||||
}
|
||||
|
||||
table.dataTable td {
|
||||
padding: 3px 10px;
|
||||
}
|
||||
|
||||
table.dataTable td.center,
|
||||
table.dataTable td.dataTables_empty {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
table.dataTable tr.odd { background-color: #E2E4FF; }
|
||||
table.dataTable tr.even { background-color: white; }
|
||||
|
||||
table.dataTable tr.odd td.sorting_1 { background-color: #D3D6FF; }
|
||||
table.dataTable tr.odd td.sorting_2 { background-color: #DADCFF; }
|
||||
table.dataTable tr.odd td.sorting_3 { background-color: #E0E2FF; }
|
||||
table.dataTable tr.even td.sorting_1 { background-color: #EAEBFF; }
|
||||
table.dataTable tr.even td.sorting_2 { background-color: #F2F3FF; }
|
||||
table.dataTable tr.even td.sorting_3 { background-color: #F9F9FF; }
|
||||
|
||||
|
||||
/*
|
||||
* Table wrapper
|
||||
*/
|
||||
.dataTables_wrapper {
|
||||
position: relative;
|
||||
clear: both;
|
||||
*zoom: 1;
|
||||
}
|
||||
.dataTables_wrapper .ui-widget-header {
|
||||
font-weight: normal;
|
||||
}
|
||||
.dataTables_wrapper .ui-toolbar {
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Page length menu
|
||||
*/
|
||||
.dataTables_length {
|
||||
float: left;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Filter
|
||||
*/
|
||||
.dataTables_filter {
|
||||
float: right;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Table information
|
||||
*/
|
||||
.dataTables_info {
|
||||
padding-top: 3px;
|
||||
clear: both;
|
||||
float: left;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Pagination
|
||||
*/
|
||||
.dataTables_paginate {
|
||||
float: right;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.dataTables_paginate .ui-button {
|
||||
margin-right: -0.1em !important;
|
||||
}
|
||||
|
||||
.paging_two_button .ui-button {
|
||||
float: left;
|
||||
cursor: pointer;
|
||||
* cursor: hand;
|
||||
}
|
||||
|
||||
.paging_full_numbers .ui-button {
|
||||
padding: 2px 6px;
|
||||
margin: 0;
|
||||
cursor: pointer;
|
||||
* cursor: hand;
|
||||
color: #333 !important;
|
||||
}
|
||||
|
||||
/* Two button pagination - previous / next */
|
||||
.paginate_disabled_previous,
|
||||
.paginate_enabled_previous,
|
||||
.paginate_disabled_next,
|
||||
.paginate_enabled_next {
|
||||
height: 19px;
|
||||
float: left;
|
||||
cursor: pointer;
|
||||
*cursor: hand;
|
||||
color: #111 !important;
|
||||
}
|
||||
.paginate_disabled_previous:hover,
|
||||
.paginate_enabled_previous:hover,
|
||||
.paginate_disabled_next:hover,
|
||||
.paginate_enabled_next:hover {
|
||||
text-decoration: none !important;
|
||||
}
|
||||
.paginate_disabled_previous:active,
|
||||
.paginate_enabled_previous:active,
|
||||
.paginate_disabled_next:active,
|
||||
.paginate_enabled_next:active {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.paginate_disabled_previous,
|
||||
.paginate_disabled_next {
|
||||
color: #666 !important;
|
||||
}
|
||||
.paginate_disabled_previous,
|
||||
.paginate_enabled_previous {
|
||||
padding-left: 23px;
|
||||
}
|
||||
.paginate_disabled_next,
|
||||
.paginate_enabled_next {
|
||||
padding-right: 23px;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.paginate_enabled_previous { background: url('../images/back_enabled.png') no-repeat top left; }
|
||||
.paginate_enabled_previous:hover { background: url('../images/back_enabled_hover.png') no-repeat top left; }
|
||||
.paginate_disabled_previous { background: url('../images/back_disabled.png') no-repeat top left; }
|
||||
|
||||
.paginate_enabled_next { background: url('../images/forward_enabled.png') no-repeat top right; }
|
||||
.paginate_enabled_next:hover { background: url('../images/forward_enabled_hover.png') no-repeat top right; }
|
||||
.paginate_disabled_next { background: url('../images/forward_disabled.png') no-repeat top right; }
|
||||
|
||||
/* Full number pagination */
|
||||
.paging_full_numbers a:active {
|
||||
outline: none
|
||||
}
|
||||
.paging_full_numbers a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.paging_full_numbers a.paginate_button,
|
||||
.paging_full_numbers a.paginate_active {
|
||||
border: 1px solid #aaa;
|
||||
-webkit-border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
padding: 2px 5px;
|
||||
margin: 0 3px;
|
||||
cursor: pointer;
|
||||
*cursor: hand;
|
||||
color: #333 !important;
|
||||
}
|
||||
|
||||
.paging_full_numbers a.paginate_button {
|
||||
background-color: #ddd;
|
||||
}
|
||||
|
||||
.paging_full_numbers a.paginate_button:hover {
|
||||
background-color: #ccc;
|
||||
text-decoration: none !important;
|
||||
}
|
||||
|
||||
.paging_full_numbers a.paginate_active {
|
||||
background-color: #99B3FF;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Processing indicator
|
||||
*/
|
||||
.dataTables_processing {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
width: 250px;
|
||||
height: 30px;
|
||||
margin-left: -125px;
|
||||
margin-top: -15px;
|
||||
padding: 14px 0 2px 0;
|
||||
border: 1px solid #ddd;
|
||||
text-align: center;
|
||||
color: #999;
|
||||
font-size: 14px;
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Sorting
|
||||
*/
|
||||
table.dataTable thead th div.DataTables_sort_wrapper {
|
||||
position: relative;
|
||||
padding-right: 20px;
|
||||
}
|
||||
|
||||
table.dataTable thead th div.DataTables_sort_wrapper span {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
margin-top: -8px;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
table.dataTable th:active {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Scrolling
|
||||
*/
|
||||
.dataTables_scroll {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.dataTables_scrollBody {
|
||||
*margin-top: -1px;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,244 @@
|
||||
|
||||
|
||||
/*
|
||||
* Table
|
||||
*/
|
||||
table.dataTable {
|
||||
margin: 0 auto;
|
||||
clear: both;
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
table.dataTable thead th {
|
||||
padding: 3px 0px 3px 10px;
|
||||
cursor: pointer;
|
||||
*cursor: hand;
|
||||
}
|
||||
|
||||
table.dataTable tfoot th {
|
||||
padding: 3px 10px;
|
||||
}
|
||||
|
||||
table.dataTable td {
|
||||
padding: 3px 10px;
|
||||
}
|
||||
|
||||
table.dataTable td.center,
|
||||
table.dataTable td.dataTables_empty {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
table.dataTable tr.odd { background-color: #f0fff0; }
|
||||
table.dataTable tr.even { background-color: #ffffff; }
|
||||
|
||||
/*table.dataTable tr.odd td.sorting_1 { background-color: #D3D6FF; }*/
|
||||
/*table.dataTable tr.odd td.sorting_2 { background-color: #DADCFF; }*/
|
||||
/*table.dataTable tr.odd td.sorting_3 { background-color: #E0E2FF; }*/
|
||||
/*table.dataTable tr.even td.sorting_1 { background-color: #EAEBFF; }*/
|
||||
/*table.dataTable tr.even td.sorting_2 { background-color: #F2F3FF; }*/
|
||||
/*table.dataTable tr.even td.sorting_3 { background-color: #F9F9FF; }*/
|
||||
|
||||
|
||||
/*
|
||||
* Table wrapper
|
||||
*/
|
||||
.dataTables_wrapper {
|
||||
position: relative;
|
||||
clear: both;
|
||||
*zoom: 1;
|
||||
}
|
||||
.dataTables_wrapper .ui-widget-header {
|
||||
font-weight: normal;
|
||||
}
|
||||
.dataTables_wrapper .ui-toolbar {
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Page length menu
|
||||
*/
|
||||
.dataTables_length {
|
||||
float: left;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Filter
|
||||
*/
|
||||
.dataTables_filter {
|
||||
float: right;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Table information
|
||||
*/
|
||||
.dataTables_info {
|
||||
padding-top: 3px;
|
||||
clear: both;
|
||||
float: left;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Pagination
|
||||
*/
|
||||
.dataTables_paginate {
|
||||
float: right;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.dataTables_paginate .ui-button {
|
||||
margin-right: -0.1em !important;
|
||||
}
|
||||
|
||||
.paging_two_button .ui-button {
|
||||
float: left;
|
||||
cursor: pointer;
|
||||
* cursor: hand;
|
||||
}
|
||||
|
||||
.paging_full_numbers .ui-button {
|
||||
padding: 2px 6px;
|
||||
margin: 0;
|
||||
cursor: pointer;
|
||||
* cursor: hand;
|
||||
color: #333 !important;
|
||||
}
|
||||
|
||||
/* Two button pagination - previous / next */
|
||||
.paginate_disabled_previous,
|
||||
.paginate_enabled_previous,
|
||||
.paginate_disabled_next,
|
||||
.paginate_enabled_next {
|
||||
height: 19px;
|
||||
float: left;
|
||||
cursor: pointer;
|
||||
*cursor: hand;
|
||||
color: #111 !important;
|
||||
}
|
||||
.paginate_disabled_previous:hover,
|
||||
.paginate_enabled_previous:hover,
|
||||
.paginate_disabled_next:hover,
|
||||
.paginate_enabled_next:hover {
|
||||
text-decoration: none !important;
|
||||
}
|
||||
.paginate_disabled_previous:active,
|
||||
.paginate_enabled_previous:active,
|
||||
.paginate_disabled_next:active,
|
||||
.paginate_enabled_next:active {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.paginate_disabled_previous,
|
||||
.paginate_disabled_next {
|
||||
color: #666 !important;
|
||||
}
|
||||
.paginate_disabled_previous,
|
||||
.paginate_enabled_previous {
|
||||
padding-left: 23px;
|
||||
}
|
||||
.paginate_disabled_next,
|
||||
.paginate_enabled_next {
|
||||
padding-right: 23px;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.paginate_enabled_previous { background: url('../images/back_enabled.png') no-repeat top left; }
|
||||
.paginate_enabled_previous:hover { background: url('../images/back_enabled_hover.png') no-repeat top left; }
|
||||
.paginate_disabled_previous { background: url('../images/back_disabled.png') no-repeat top left; }
|
||||
|
||||
.paginate_enabled_next { background: url('../images/forward_enabled.png') no-repeat top right; }
|
||||
.paginate_enabled_next:hover { background: url('../images/forward_enabled_hover.png') no-repeat top right; }
|
||||
.paginate_disabled_next { background: url('../images/forward_disabled.png') no-repeat top right; }
|
||||
|
||||
/* Full number pagination */
|
||||
.paging_full_numbers a:active {
|
||||
outline: none
|
||||
}
|
||||
.paging_full_numbers a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.paging_full_numbers a.paginate_button,
|
||||
.paging_full_numbers a.paginate_active {
|
||||
border: 1px solid #aaa;
|
||||
-webkit-border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
padding: 2px 5px;
|
||||
margin: 0 3px;
|
||||
cursor: pointer;
|
||||
*cursor: hand;
|
||||
color: #333 !important;
|
||||
}
|
||||
|
||||
.paging_full_numbers a.paginate_button {
|
||||
background-color: #ddd;
|
||||
}
|
||||
|
||||
.paging_full_numbers a.paginate_button:hover {
|
||||
background-color: #ccc;
|
||||
text-decoration: none !important;
|
||||
}
|
||||
|
||||
.paging_full_numbers a.paginate_active {
|
||||
background-color: #99B3FF;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Processing indicator
|
||||
*/
|
||||
.dataTables_processing {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
width: 250px;
|
||||
height: 30px;
|
||||
margin-left: -125px;
|
||||
margin-top: -15px;
|
||||
padding: 14px 0 2px 0;
|
||||
border: 1px solid #ddd;
|
||||
text-align: center;
|
||||
color: #999;
|
||||
font-size: 14px;
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Sorting
|
||||
*/
|
||||
table.dataTable thead th div.DataTables_sort_wrapper {
|
||||
position: relative;
|
||||
padding-right: 20px;
|
||||
}
|
||||
|
||||
table.dataTable thead th div.DataTables_sort_wrapper span {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
margin-top: -8px;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
table.dataTable th:active {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Scrolling
|
||||
*/
|
||||
.dataTables_scroll {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.dataTables_scrollBody {
|
||||
*margin-top: -1px;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
}
|
||||
|
||||
249
org.migor.webclient.admin/src/main/webapp/css/migor.css
Normal file
@@ -0,0 +1,249 @@
|
||||
|
||||
|
||||
|
||||
/* G L O B A L */
|
||||
html, body {
|
||||
font-family: Verdana,serif;
|
||||
font-size: 12px;
|
||||
color: #433F38;
|
||||
line-height: 16px;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.clear {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
h1 {
|
||||
|
||||
}
|
||||
|
||||
/* H E A D E R */
|
||||
#migor-titleBar .logo {
|
||||
float: left;
|
||||
}
|
||||
#migor-titleBar .headline {
|
||||
color: #649C21;
|
||||
float: left;
|
||||
font-size: 30px;
|
||||
overflow: hidden;
|
||||
padding-bottom: 10px;
|
||||
padding-left: 32px;
|
||||
padding-top: 34px;
|
||||
position: relative;
|
||||
width: 600px;
|
||||
}
|
||||
#migor-titleBar .headline .subHeadline {
|
||||
color: #333333;
|
||||
font-size: 16px;
|
||||
left: 20px;
|
||||
position: relative;
|
||||
top: 10px;
|
||||
}
|
||||
#migor-titleBar .company {
|
||||
font-size: 11px;
|
||||
font-weight: bold;
|
||||
padding-right: 20px;
|
||||
padding-top: 60px;
|
||||
text-align: right;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
|
||||
/* M E N U */
|
||||
#migor-menuBar {
|
||||
background: url("images/ui-bg_highlight-hard_75_e6e6e6_1x100.png") repeat-x scroll 50% 50% #EEEEEE;
|
||||
border: 1px solid #D8DCDF;
|
||||
}
|
||||
|
||||
/* D I A L O G */
|
||||
|
||||
|
||||
ul.service-config {
|
||||
list-style-type: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
li.service-config {
|
||||
list-style-type: none;
|
||||
margin: 0;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
|
||||
/* W I D G E T S */
|
||||
|
||||
/* Form */
|
||||
|
||||
ul.sortable-list {
|
||||
list-style-type: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
ul.sortable-list li {
|
||||
display: block;
|
||||
height: 15px;
|
||||
margin: 0;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
p.form-element {
|
||||
margin: 0;
|
||||
padding: 10px 0 10px 0;
|
||||
}
|
||||
|
||||
p.form-element.ui-state-error {
|
||||
/*padding: 5px 5px 10px 15px;*/
|
||||
}
|
||||
|
||||
label.form-element {
|
||||
display: block;
|
||||
width: 100%;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
textarea.form-element,
|
||||
input.form-element,
|
||||
select.form-element,
|
||||
span.form-element {
|
||||
float: right;
|
||||
}
|
||||
|
||||
textarea.form-element,
|
||||
input.form-element,
|
||||
select.form-element,
|
||||
span.form-element {
|
||||
float: right;
|
||||
}
|
||||
|
||||
#form-element-info {
|
||||
height: 85px;
|
||||
}
|
||||
|
||||
#form-element-info textarea {
|
||||
height: 60px;
|
||||
}
|
||||
|
||||
img.form-element {
|
||||
position: relative;
|
||||
left: 80px;
|
||||
}
|
||||
|
||||
hr.dialogDivider {
|
||||
border: 0;
|
||||
height: 1px;
|
||||
background-image: -webkit-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,0.75), rgba(0,0,0,0));
|
||||
background-image: -moz-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,0.75), rgba(0,0,0,0));
|
||||
background-image: -ms-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,0.75), rgba(0,0,0,0));
|
||||
background-image: -o-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,0.75), rgba(0,0,0,0));
|
||||
}
|
||||
|
||||
input[type=text].form-element,
|
||||
textarea.form-element,
|
||||
input[type=file].form-element,
|
||||
span.form-element,
|
||||
select.form-element {
|
||||
width: 240px;
|
||||
}
|
||||
|
||||
p.form-error-message {
|
||||
text-align: center;
|
||||
margin: 0;
|
||||
padding: 5px 0 5px 0;
|
||||
}
|
||||
|
||||
p.form-element-error-message {
|
||||
text-align: center;
|
||||
margin: 0;
|
||||
padding: 0 0 5px 0;
|
||||
}
|
||||
|
||||
|
||||
div.from-error-message {
|
||||
margin: 0 0 10px 115px;
|
||||
}
|
||||
|
||||
/*Tabs*/
|
||||
a.ui-tabs-anchor.closable {
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
a.ui-tabs-anchor.closable span.ui-icon {
|
||||
cursor: pointer;
|
||||
position: absolute;
|
||||
right: 4px;
|
||||
top: 7px;
|
||||
}
|
||||
|
||||
|
||||
/*Button*/
|
||||
.migor-button {
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
/*Titlebar*/
|
||||
.ui-titlebar-item {
|
||||
padding-top: 0.4em;
|
||||
padding-bottom: 0.4em;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.ui-titlebar-item.first {
|
||||
padding-left: 1em;
|
||||
}
|
||||
|
||||
.ui-titlebar-item.last {
|
||||
float: right;
|
||||
padding-right: 1em;
|
||||
}
|
||||
|
||||
/*Menubar*/
|
||||
.ui-menubar {
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
.ui-menubar-item {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.ui-menubar .ui-button {
|
||||
float: left;
|
||||
font-weight: normal;
|
||||
border-top-width: 0 !important;
|
||||
border-bottom-width: 0 !important;
|
||||
margin: 0;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.ui-menubar .ui-menubar-link {
|
||||
border-right: 1px dashed transparent;
|
||||
border-left: 1px dashed transparent;
|
||||
}
|
||||
|
||||
.ui-menubar .ui-menu {
|
||||
width: 200px;
|
||||
position: absolute;
|
||||
z-index: 9999;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
|
||||
.ui-timepicker-div .ui-widget-header { margin-bottom: 8px; }
|
||||
.ui-timepicker-div dl { text-align: left; }
|
||||
.ui-timepicker-div dl dt { float: left; clear:left; padding: 0 0 0 5px; }
|
||||
.ui-timepicker-div dl dd { margin: 0 10px 10px 40%; }
|
||||
.ui-timepicker-div td { font-size: 90%; }
|
||||
.ui-tpicker-grid-label { background: none; border: none; margin: 0; padding: 0; }
|
||||
|
||||
.ui-timepicker-rtl{ direction: rtl; }
|
||||
.ui-timepicker-rtl dl { text-align: right; padding: 0 5px 0 0; }
|
||||
.ui-timepicker-rtl dl dt{ float: right; clear: right; }
|
||||
.ui-timepicker-rtl dl dd { margin: 0 40% 10px 10px; }
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
BIN
org.migor.webclient.admin/src/main/webapp/images/ajax-loader.gif
Normal file
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 3.8 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 142 B |
|
After Width: | Height: | Size: 193 B |
|
After Width: | Height: | Size: 184 B |
|
After Width: | Height: | Size: 280 B |
|
After Width: | Height: | Size: 417 B |
|
After Width: | Height: | Size: 464 B |
|
After Width: | Height: | Size: 136 B |
|
After Width: | Height: | Size: 134 B |
|
After Width: | Height: | Size: 172 B |
|
After Width: | Height: | Size: 367 B |
|
After Width: | Height: | Size: 264 B |
|
After Width: | Height: | Size: 261 B |
|
After Width: | Height: | Size: 376 B |
|
After Width: | Height: | Size: 457 B |