/*******************************************************************************
* Copyright (c) 2012-2015 Codenvy, S.A.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.api.project.server;
import org.eclipse.che.api.core.ServerException;
import java.util.Properties;
import java.util.Set;
/**
* Stores additional information about single project.
*
* @author andrew00x
*/
public class ProjectMisc {
static final String UPDATED = "updated";
static final String CREATED = "created";
private final InternalMisc data;
private final Project project;
public ProjectMisc(Properties properties, Project project) {
this.data = new InternalMisc(properties);
this.project = project;
}
public ProjectMisc(Project project) {
this.data = new InternalMisc();
this.project = project;
}
final Project getProject() {
return project;
}
public long getModificationDate() {
return data.getLong(UPDATED, -1L);
}
public long getCreationDate() {
return data.getLong(CREATED, -1L);
}
public void setModificationDate(long date) {
data.setLong(UPDATED, date);
}
public void setCreationDate(long date) {
data.setLong(CREATED, date);
}
public void save() throws ServerException {
project.saveMisc(this);
}
boolean isUpdated() {
return data.isUpdated();
}
Properties asProperties() {
return data.properties;
}
private static class InternalMisc {
final Properties properties;
boolean updated;
boolean isUpdated() {
synchronized (properties) {
return updated;
}
}
InternalMisc() {
this(new Properties());
}
InternalMisc(Properties properties) {
this.properties = properties;
}
String get(String name) {
return properties.getProperty(name);
}
void set(String name, String value) {
if (name == null) {
throw new IllegalArgumentException("The name of property may not be null. ");
}
if (value == null) {
properties.remove(name);
} else {
properties.setProperty(name, value);
}
synchronized (properties) {
updated = true;
}
}
boolean getBoolean(String name) {
return getBoolean(name, false);
}
boolean getBoolean(String name, boolean defaultValue) {
final String str = get(name);
return str == null ? defaultValue : Boolean.parseBoolean(str);
}
void setBoolean(String name, boolean value) {
set(name, String.valueOf(value));
}
int getInt(String name) {
return getInt(name, 0);
}
int getInt(String name, int defaultValue) {
final String str = get(name);
if (str == null)
return defaultValue;
try {
return Integer.parseInt(str);
} catch (NumberFormatException e) {
return defaultValue;
}
}
void setInt(String name, int value) {
set(name, String.valueOf(value));
}
long getLong(String name) {
return getLong(name, 0L);
}
long getLong(String name, long defaultValue) {
final String str = get(name);
if (str == null)
return defaultValue;
try {
return Long.parseLong(str);
} catch (NumberFormatException e) {
return defaultValue;
}
}
void setLong(String name, long value) {
set(name, String.valueOf(value));
}
float getFloat(String name) {
return getFloat(name, 0.0F);
}
float getFloat(String name, float defaultValue) {
final String str = get(name);
if (str == null)
return defaultValue;
try {
return Float.parseFloat(str);
} catch (NumberFormatException e) {
return defaultValue;
}
}
void setFloat(String name, float value) {
set(name, String.valueOf(value));
}
double getDouble(String name) {
return getDouble(name, 0.0);
}
double getDouble(String name, double defaultValue) {
final String str = get(name);
if (str == null)
return defaultValue;
try {
return Double.parseDouble(str);
} catch (NumberFormatException e) {
return defaultValue;
}
}
void setDouble(String name, double value) {
set(name, String.valueOf(value));
}
Set<String> getNames() {
return properties.stringPropertyNames();
}
}
}