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 |