Initial import (partially)

This commit is contained in:
2013-11-23 15:49:50 +01:00
parent 50d9edfb75
commit f5ee928477
183 changed files with 69850 additions and 0 deletions

72
org.migor.core/pom.xml Normal file
View 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>

View File

@@ -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;
}
}

View File

@@ -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");
}
}

View File

@@ -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);
}
}

View 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();
}
}
}

View 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
View 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>

View File

@@ -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();
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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();
}
}

View File

@@ -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 {
}

View File

@@ -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());
}
}
}

View 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>

View File

@@ -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>

View File

@@ -0,0 +1,3 @@
<jboss-web>
<context-root>/migor/services</context-root>
</jboss-web>

View 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>

View 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
View 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>

View 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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}

View File

@@ -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);
}
}

View 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>

View File

@@ -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>

View File

@@ -0,0 +1,3 @@
<jboss-web>
<context-root>migor/admin</context-root>
</jboss-web>

View File

@@ -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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 415 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 413 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 207 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 230 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 335 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 333 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 207 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 332 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 251 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 252 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 336 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 251 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 321 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 328 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 335 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 322 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 251 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 252 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 203 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 353 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 277 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 351 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 349 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View 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}

View File

@@ -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;
}

View File

@@ -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;
}

View 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; }

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 280 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 417 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 464 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 367 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 376 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 457 B

Some files were not shown because too many files have changed in this diff Show More