You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cmda.apache.org by xi...@apache.org on 2015/09/09 00:49:46 UTC

[37/51] [partial] incubator-cmda git commit: Add frontend and backend

http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/37774c92/ApacheCMDA-Backend/app/models/DatasetLog.java
----------------------------------------------------------------------
diff --git a/ApacheCMDA-Backend/app/models/DatasetLog.java b/ApacheCMDA-Backend/app/models/DatasetLog.java
new file mode 100644
index 0000000..aa6d49c
--- /dev/null
+++ b/ApacheCMDA-Backend/app/models/DatasetLog.java
@@ -0,0 +1,124 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package models;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToOne;
+
+@Entity
+public class DatasetLog {
+	@Id
+	@GeneratedValue(strategy = GenerationType.AUTO)
+	private long id;
+	@ManyToOne(optional = false)
+	@JoinColumn(name = "serviceExecutionLogId", referencedColumnName = "id")
+	private ServiceExecutionLog serviceExecutionLog;
+	@ManyToOne(optional = false)
+	@JoinColumn(name = "dataSetId", referencedColumnName = "id")
+	private Dataset dataset;
+	private String plotUrl;
+	private String dataUrl;
+	@ManyToOne(optional = false)
+	@JoinColumn(name = "originalDatasetId", referencedColumnName = "id")
+	private Dataset originalDataset;
+	@ManyToOne(optional = false)
+	@JoinColumn(name = "outputDatasetId", referencedColumnName = "id")
+	private Dataset outputDataset;
+	
+	public DatasetLog() {
+		
+	}
+	
+	public DatasetLog(ServiceExecutionLog serviceExecutionLog, Dataset dataset,
+			String plotUrl, String dataUrl, Dataset originalDataset,
+			Dataset outputDataset) {
+		super();
+		this.serviceExecutionLog = serviceExecutionLog;
+		this.dataset = dataset;
+		this.plotUrl = plotUrl;
+		this.dataUrl = dataUrl;
+		this.originalDataset = originalDataset;
+		this.outputDataset = outputDataset;
+	}
+
+	public ServiceExecutionLog getServiceExecutionLog() {
+		return serviceExecutionLog;
+	}
+
+	public void setServiceExecutionLog(ServiceExecutionLog serviceExecutionLog) {
+		this.serviceExecutionLog = serviceExecutionLog;
+	}
+
+	public Dataset getDataset() {
+		return dataset;
+	}
+
+	public void setDataSet(Dataset dataset) {
+		this.dataset = dataset;
+	}
+
+	public String getPlotUrl() {
+		return plotUrl;
+	}
+
+	public void setPlotUrl(String plotUrl) {
+		this.plotUrl = plotUrl;
+	}
+
+	public String getDataUrl() {
+		return dataUrl;
+	}
+
+	public void setDataUrl(String dataUrl) {
+		this.dataUrl = dataUrl;
+	}
+
+	public Dataset getOriginalDataset() {
+		return originalDataset;
+	}
+
+	public void setOriginalDataset(Dataset originalDataset) {
+		this.originalDataset = originalDataset;
+	}
+
+	public Dataset getOutputDataset() {
+		return outputDataset;
+	}
+
+	public void setOutputDataset(Dataset outputDataset) {
+		this.outputDataset = outputDataset;
+	}
+
+	public long getId() {
+		return id;
+	}
+
+	@Override
+	public String toString() {
+		return "DatasetLog [id=" + id + ", serviceExecutionLog="
+				+ serviceExecutionLog + ", dataSet=" + dataset + ", plotUrl="
+				+ plotUrl + ", dataUrl=" + dataUrl + ", originalDataSet="
+				+ originalDataset + ", outputDataSet=" + outputDataset + "]";
+	}
+	
+	
+}

http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/37774c92/ApacheCMDA-Backend/app/models/DatasetLogRepository.java
----------------------------------------------------------------------
diff --git a/ApacheCMDA-Backend/app/models/DatasetLogRepository.java b/ApacheCMDA-Backend/app/models/DatasetLogRepository.java
new file mode 100644
index 0000000..3d70292
--- /dev/null
+++ b/ApacheCMDA-Backend/app/models/DatasetLogRepository.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package models;
+
+import org.springframework.data.repository.CrudRepository;
+
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+@Named
+@Singleton
+public interface DatasetLogRepository extends CrudRepository<DatasetLog, Long> {
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/37774c92/ApacheCMDA-Backend/app/models/DatasetRepository.java
----------------------------------------------------------------------
diff --git a/ApacheCMDA-Backend/app/models/DatasetRepository.java b/ApacheCMDA-Backend/app/models/DatasetRepository.java
new file mode 100644
index 0000000..7b9bdeb
--- /dev/null
+++ b/ApacheCMDA-Backend/app/models/DatasetRepository.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package models;
+
+import java.util.Date;
+import java.util.List;
+
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.CrudRepository;
+
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+@Named
+@Singleton
+public interface DatasetRepository extends CrudRepository<Dataset, Long> {
+	List<Dataset> findByNameLikeAndAgencyIdLikeAndGridDimensionLikeAndPhysicalVariableLikeAndInstrument_Id(String name, String agencyId, String gridDimension, String physicalVariable,long instrumentId);
+	List<Dataset> findByNameLikeAndAgencyIdLikeAndGridDimensionLikeAndPhysicalVariableLike(String name, String agencyId, String gridDimension, String physicalVariable);
+	List<Dataset> findByvariableNameInWebInterface(String variableNameInWebInterface);
+	List<Dataset> findByNameLikeAndAgencyIdLikeAndGridDimensionLikeAndPhysicalVariableLikeAndInstrument_IdAndStartTimeLessThanEqualOrEndTimeGreaterThanEqual(String name, String agencyId, String gridDimension, String physicalVariable, long instrumentId, Date startTime, Date endTime);
+	List<Dataset> findByNameLikeAndAgencyIdLikeAndGridDimensionLikeAndPhysicalVariableLikeAndStartTimeLessThanEqualOrEndTimeGreaterThanEqual(String name, String agencyId, String gridDimension, String physicalVariable, Date startTime, Date endTime);
+	
+	//New Dataset Search 
+	@Query(value = "select d.* from Dataset d where ((d.name like ?1) and (d.agencyId like ?2) and (d.gridDimension like ?3) and (d.physicalVariable like ?4) and (d.instrumentId = ?5)) and ((d.startTime between ?6 and ?7) or (d.endTime between ?6 and ?7) or (d.startTime <= ?6 and d.endTime >= ?7))", nativeQuery = true)
+	List<Dataset> findDatasetWithInstrument_Id(String name, String agencyId, String gridDimension, String physicalVariable, long instrumentId, Date startTime, Date endTime);
+	
+	@Query(value = "select d.* from Dataset d where ((d.name like ?1) and (d.agencyId like ?2) and (d.gridDimension like ?3) and (d.physicalVariable like ?4)) and ((d.startTime between ?5 and ?6) or (d.endTime between ?5 and ?6) or (d.startTime <= ?5 and d.endTime >= ?6))", nativeQuery = true)
+	List<Dataset> findDataset(String name, String agencyId, String gridDimension, String physicalVariable, Date startTime, Date endTime);
+	
+	@Query(value = "select d.* from Dataset d where ((d.name like ?1) and (d.agencyId like ?2) and (d.gridDimension like ?3) and (d.physicalVariable like ?4) and (d.source like ?5)) and ((d.startTime between ?6 and ?7) or (d.endTime between ?6 and ?7) or (d.startTime <= ?6 and d.endTime >= ?7))", nativeQuery = true)
+	List<Dataset> findDatasetWithInstrument(String name, String agencyId, String gridDimension, String physicalVariable, String source, Date startTime, Date endTime);
+	
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/37774c92/ApacheCMDA-Backend/app/models/Instrument.java
----------------------------------------------------------------------
diff --git a/ApacheCMDA-Backend/app/models/Instrument.java b/ApacheCMDA-Backend/app/models/Instrument.java
new file mode 100644
index 0000000..bb083a1
--- /dev/null
+++ b/ApacheCMDA-Backend/app/models/Instrument.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package models;
+
+import java.util.Date;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+
+@Entity
+public class Instrument {
+	@Id
+	@GeneratedValue(strategy = GenerationType.AUTO)
+	private long id;
+	private String name;
+	private String description;
+	private Date launchDate;
+	
+	public Instrument() {
+	}
+	
+	public Instrument (String name, String description, Date launchDate) {
+		super();
+		this.name = name;
+		this.description = description;
+		this.launchDate = launchDate;
+	}
+
+	public long getId() {
+		return id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+
+	public Date getLaunchDate() {
+		return launchDate;
+	}
+
+	public void setId(long id) {
+		this.id = id;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	public void setLaunchDate(Date launchDate) {
+		this.launchDate = launchDate;
+	}
+
+	@Override
+	public String toString() {
+		return "Instrument [id=" + id + ", name=" + name + ", description="
+				+ description + ", launchDate=" + launchDate + "]";
+	}
+
+	
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/37774c92/ApacheCMDA-Backend/app/models/InstrumentRepository.java
----------------------------------------------------------------------
diff --git a/ApacheCMDA-Backend/app/models/InstrumentRepository.java b/ApacheCMDA-Backend/app/models/InstrumentRepository.java
new file mode 100644
index 0000000..e2b61ae
--- /dev/null
+++ b/ApacheCMDA-Backend/app/models/InstrumentRepository.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package models;
+
+import org.springframework.data.repository.CrudRepository;
+
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+@Named
+@Singleton
+public interface InstrumentRepository extends CrudRepository<Instrument, Long> {
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/37774c92/ApacheCMDA-Backend/app/models/JournalPublication.java
----------------------------------------------------------------------
diff --git a/ApacheCMDA-Backend/app/models/JournalPublication.java b/ApacheCMDA-Backend/app/models/JournalPublication.java
new file mode 100644
index 0000000..4a8590c
--- /dev/null
+++ b/ApacheCMDA-Backend/app/models/JournalPublication.java
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package models;
+
+import javax.persistence.Entity;
+import javax.persistence.PrimaryKeyJoinColumn;
+
+@Entity
+@PrimaryKeyJoinColumn(name = "journalPublicationId", referencedColumnName = "id")//referencedColumnName
+public class JournalPublication extends Publication {
+	private String journalName;
+	private int volume;
+	private int qcolumn;//naming problem
+	private String page;
+	
+	public JournalPublication() {
+	}
+	public JournalPublication(String paperTitle, User author,
+			String publicationChannel, int year, String journalName, int volume,
+			int column, String page) {
+		super(paperTitle, author, publicationChannel, year);
+		this.journalName = journalName;
+		this.volume = volume;
+		this.qcolumn = column;
+		this.page = page;
+	}
+	
+	public String getJournalName() {
+		return journalName;
+	}
+	public void setJournalName(String journalName) {
+		this.journalName = journalName;
+	}
+	public int getVolume() {
+		return volume;
+	}
+	public void setVolume(int volume) {
+		this.volume = volume;
+	}
+	public int getColumn() {
+		return qcolumn;
+	}
+	public void setColumn(int column) {
+		this.qcolumn = column;
+	}
+	public String getPage() {
+		return page;
+	}
+	public void setPage(String page) {
+		this.page = page;
+	}
+	
+	@Override
+	public String toString() {
+		return "JournalPublication [journalName=" + journalName + ", volume="
+				+ volume + ", column=" + qcolumn + ", page=" + page
+				+ ", toString()=" + super.toString() + "]";
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/37774c92/ApacheCMDA-Backend/app/models/JournalPublicationRepository.java
----------------------------------------------------------------------
diff --git a/ApacheCMDA-Backend/app/models/JournalPublicationRepository.java b/ApacheCMDA-Backend/app/models/JournalPublicationRepository.java
new file mode 100644
index 0000000..01ffac1
--- /dev/null
+++ b/ApacheCMDA-Backend/app/models/JournalPublicationRepository.java
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package models;
+
+import org.springframework.data.repository.CrudRepository;
+
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+@Named
+@Singleton
+public interface JournalPublicationRepository extends CrudRepository<JournalPublication, Long> {
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/37774c92/ApacheCMDA-Backend/app/models/Parameter.java
----------------------------------------------------------------------
diff --git a/ApacheCMDA-Backend/app/models/Parameter.java b/ApacheCMDA-Backend/app/models/Parameter.java
new file mode 100644
index 0000000..d9ada61
--- /dev/null
+++ b/ApacheCMDA-Backend/app/models/Parameter.java
@@ -0,0 +1,117 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package models;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+@Entity
+public class Parameter {
+	@Id
+	@GeneratedValue(strategy = GenerationType.AUTO)
+	private long id;
+	@ManyToOne(optional = false)
+	@JoinColumn(name = "serviceId", referencedColumnName = "id")
+	private ClimateService climateService;
+	private long indexInService;
+	private String name;
+	private String dataRange;
+	private String rule;
+	private String purpose;
+	
+	public Parameter() {
+	}
+
+	public Parameter(ClimateService climateService, long indexInService,
+			String name, String dataRange,
+			String rule, String purpose) {
+		super();
+		this.climateService = climateService;
+		this.indexInService = indexInService;
+		this.name = name;
+		this.dataRange = dataRange;
+		this.rule = rule;
+		this.purpose = purpose;
+	}
+
+	public long getId() {
+		return id;
+	}
+
+	public ClimateService getClimateService() {
+		return climateService;
+	}
+
+	public void setClimateService(ClimateService climateService) {
+		this.climateService = climateService;
+	}
+
+	public long getIndexInService() {
+		return indexInService;
+	}
+
+	public void setIndexInService(long indexInService) {
+		this.indexInService = indexInService;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getDataRange() {
+		return dataRange;
+	}
+
+	public void setDataRange(String dataRange) {
+		this.dataRange = dataRange;
+	}
+	
+	public String getRule() {
+		return rule;
+	}
+
+	public void setRule(String rule) {
+		this.rule = rule;
+	}
+
+	public String getPurpose() {
+		return purpose;
+	}
+
+	public void setPurpose(String purpose) {
+		this.purpose = purpose;
+	}
+
+	@Override
+	public String toString() {
+		return "Parameter [id=" + id + ", climateService=" + climateService
+				+ ", indexInService=" + indexInService + ", name=" + name
+				+ ", dataRange=" + dataRange
+				+ ", rule=" + rule + ", purpose=" + purpose + "]";
+	}
+
+	
+	
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/37774c92/ApacheCMDA-Backend/app/models/ParameterRepository.java
----------------------------------------------------------------------
diff --git a/ApacheCMDA-Backend/app/models/ParameterRepository.java b/ApacheCMDA-Backend/app/models/ParameterRepository.java
new file mode 100644
index 0000000..9b1865a
--- /dev/null
+++ b/ApacheCMDA-Backend/app/models/ParameterRepository.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package models;
+
+import org.springframework.data.repository.CrudRepository;
+
+import javax.inject.Named;
+import javax.inject.Singleton;
+import java.util.List;
+
+@Named
+@Singleton
+public interface ParameterRepository extends CrudRepository<Parameter, Long> {
+	List<Parameter> findByName(String name);
+	Parameter findByNameAndClimateService(String name, ClimateService climateService);
+	Parameter findByNameAndClimateService_Id(String name, long serviceId);
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/37774c92/ApacheCMDA-Backend/app/models/Publication.java
----------------------------------------------------------------------
diff --git a/ApacheCMDA-Backend/app/models/Publication.java b/ApacheCMDA-Backend/app/models/Publication.java
new file mode 100644
index 0000000..5373fb3
--- /dev/null
+++ b/ApacheCMDA-Backend/app/models/Publication.java
@@ -0,0 +1,99 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package models;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+@Entity
+@Inheritance(strategy=InheritanceType.JOINED)
+public class Publication {
+
+    @Id
+    @GeneratedValue(strategy=GenerationType.AUTO)
+    private long id;
+    private String paperTitle;
+    @ManyToOne(optional = false)
+	@JoinColumn(name = "authorId", referencedColumnName = "id")//using another table is better
+    private User author;
+    private String publicationChannel;
+    private int year;
+    
+	public Publication() {
+	}
+
+	public Publication(String paperTitle, User author,
+			String publicationChannel, int year) {
+		super();
+		this.paperTitle = paperTitle;
+		this.author = author;
+		this.publicationChannel = publicationChannel;
+		this.year = year;
+	}
+
+	public String getPaperTitle() {
+		return paperTitle;
+	}
+
+	public void setPaperTitle(String paperTitle) {
+		this.paperTitle = paperTitle;
+	}
+
+	public User getAuthor() {
+		return author;
+	}
+
+	public void setAuthor(User author) {
+		this.author = author;
+	}
+
+	public String getPublicationChannel() {
+		return publicationChannel;
+	}
+
+	public void setPublicationChannel(String publicationChannel) {
+		this.publicationChannel = publicationChannel;
+	}
+
+	public int getYear() {
+		return year;
+	}
+
+	public void setYear(int year) {
+		this.year = year;
+	}
+
+	public long getId() {
+		return id;
+	}
+
+	@Override
+	public String toString() {
+		return "Publication [id=" + id + ", paperTitle=" + paperTitle
+				+ ", author=" + author + ", publicationChannel="
+				+ publicationChannel + ", year=" + year + "]";
+	}
+    
+    
+}
+

http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/37774c92/ApacheCMDA-Backend/app/models/ServiceConfiguration.java
----------------------------------------------------------------------
diff --git a/ApacheCMDA-Backend/app/models/ServiceConfiguration.java b/ApacheCMDA-Backend/app/models/ServiceConfiguration.java
new file mode 100644
index 0000000..4f9762f
--- /dev/null
+++ b/ApacheCMDA-Backend/app/models/ServiceConfiguration.java
@@ -0,0 +1,129 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package models;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+
+@Entity
+public class ServiceConfiguration {
+	@Id
+	@GeneratedValue(strategy = GenerationType.AUTO)
+	private long id;
+	@ManyToOne(optional = false)
+	@JoinColumn(name = "serviceId", referencedColumnName = "id")
+	private ClimateService climateservice;
+	@ManyToOne(optional = false)
+	@JoinColumn(name = "userId", referencedColumnName = "id")
+	private User user;
+	private String runTime;
+
+//	@OneToMany(mappedBy="serviceConfiguration")
+//	private List<ServiceConfigurationItem> serviceConfigurationItems;
+
+	public ServiceConfiguration() {
+	}
+	
+	public ServiceConfiguration(ClimateService climateservice,
+			User user,String runtime){
+		super();
+		this.climateservice = climateservice;
+		this.user = user;
+		this.runTime = runtime;
+	}
+
+	public long getId() {
+		return id;
+	}
+
+	public ClimateService getClimateservice() {
+		return climateservice;
+	}
+
+	public User getUser() {
+		return user;
+	}
+
+	public String getRunTime() {
+		return runTime;
+	}
+
+	public void setId(long id) {
+		this.id = id;
+	}
+
+	public void setClimateservice(ClimateService climateservice) {
+		this.climateservice = climateservice;
+	}
+
+	public void setUser(User user) {
+		this.user = user;
+	}
+
+	public void setRunTime(String runTime) {
+		this.runTime = runTime;
+	}
+
+//	public List<ServiceConfigurationItem> getServiceConfigurationItems() {
+//		return serviceConfigurationItems;
+//	}
+//
+//	public void setServiceConfigurationItems(
+//			List<ServiceConfigurationItem> serviceConfigurationItems) {
+//		this.serviceConfigurationItems = serviceConfigurationItems;
+//	}
+
+	@Override
+	public String toString() {
+		return "ServiceConfiguration [id=" + id + ", climateservice="
+				+ climateservice + ", user=" + user + ", runTime=" + runTime
+				+ "]";
+	}
+
+
+    @Override
+    public boolean equals(Object o) {
+        // If the object is compared with itself then return true
+        if (o == this) {
+            return true;
+        }
+
+        /* Check if o is an instance of ServiceConfiguration or not
+          "null instanceof [type]" also returns false */
+        if (!(o instanceof ServiceConfiguration)) {
+            return false;
+        }
+
+        // typecast o to ServiceConfiguration so that we can compare data members
+        ServiceConfiguration c = (ServiceConfiguration) o;
+
+        if (this.getId() == c.getId())
+            return true;
+        else
+            return false;
+    }
+
+    @Override
+    public int hashCode(){
+        return (int)id;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/37774c92/ApacheCMDA-Backend/app/models/ServiceConfigurationItem.java
----------------------------------------------------------------------
diff --git a/ApacheCMDA-Backend/app/models/ServiceConfigurationItem.java b/ApacheCMDA-Backend/app/models/ServiceConfigurationItem.java
new file mode 100644
index 0000000..2d54f50
--- /dev/null
+++ b/ApacheCMDA-Backend/app/models/ServiceConfigurationItem.java
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package models;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+
+
+@Entity
+public class ServiceConfigurationItem {
+	@Id
+	@GeneratedValue(strategy = GenerationType.AUTO)
+	private long id;
+	
+	@ManyToOne(optional = false)
+	@JoinColumn(name = "serviceConfigurationId", referencedColumnName = "id")
+	private ServiceConfiguration serviceConfiguration;
+	
+	@ManyToOne(optional = false)
+	@JoinColumn(name = "parameterId", referencedColumnName = "id")
+	private Parameter parameter;
+	
+	private String value;
+
+	public ServiceConfigurationItem() {
+	}
+	
+	public ServiceConfigurationItem(ServiceConfiguration serviceConfiguration, Parameter parameter
+			, String value) {
+		super();
+		this.serviceConfiguration = serviceConfiguration;
+		this.parameter = parameter;
+		this.value = value;
+	}
+
+	public long getId() {
+		return id;
+	}
+
+	public ServiceConfiguration getServiceConfiguration() {
+		return serviceConfiguration;
+	}
+	public void setServiceConfiguration(ServiceConfiguration serviceConfiguration) {
+		this.serviceConfiguration = serviceConfiguration;
+	}
+	public Parameter getParameter() {
+		return parameter;
+	}
+	public void setParameter(Parameter parameter) {
+		this.parameter = parameter;
+	}
+	public String getValue() {
+		return value;
+	}
+	public void setValue(String value) {
+		this.value = value;
+	}	
+
+	@Override
+	public String toString() {
+		return "ServiceConfigurationItem [id=" + id + ", serviceConfiguration="
+				+ serviceConfiguration + ", parameter=" + parameter
+				+ ", value=" + value + "]";
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/37774c92/ApacheCMDA-Backend/app/models/ServiceConfigurationItemRepository.java
----------------------------------------------------------------------
diff --git a/ApacheCMDA-Backend/app/models/ServiceConfigurationItemRepository.java b/ApacheCMDA-Backend/app/models/ServiceConfigurationItemRepository.java
new file mode 100644
index 0000000..79c230a
--- /dev/null
+++ b/ApacheCMDA-Backend/app/models/ServiceConfigurationItemRepository.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package models;
+
+import java.util.List;
+
+import org.springframework.data.repository.CrudRepository;
+
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+@Named
+@Singleton
+public interface ServiceConfigurationItemRepository extends CrudRepository<ServiceConfigurationItem, Long> {
+	
+	List<ServiceConfigurationItem> findByServiceConfiguration_Id (long serviceConfigurationId);
+    
+	List<ServiceConfigurationItem> findByParameter (Parameter parameter);
+	List<ServiceConfigurationItem> findByParameter_Id (long parameterId);
+
+	List<ServiceConfigurationItem> findByParameterInAndValue (List<Parameter> parameter, String value);
+	
+	ServiceConfigurationItem findFirstByParameterAndServiceConfiguration(Parameter parameter, ServiceConfiguration serviceConfiguration);
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/37774c92/ApacheCMDA-Backend/app/models/ServiceConfigurationRepository.java
----------------------------------------------------------------------
diff --git a/ApacheCMDA-Backend/app/models/ServiceConfigurationRepository.java b/ApacheCMDA-Backend/app/models/ServiceConfigurationRepository.java
new file mode 100644
index 0000000..7c0ed94
--- /dev/null
+++ b/ApacheCMDA-Backend/app/models/ServiceConfigurationRepository.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package models;
+
+import java.util.List;
+
+import org.springframework.data.repository.CrudRepository;
+
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+@Named
+@Singleton
+public interface ServiceConfigurationRepository extends CrudRepository<ServiceConfiguration, Long> {
+	List<ServiceConfiguration> findAllByUser(User user);
+}

http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/37774c92/ApacheCMDA-Backend/app/models/ServiceEntry.java
----------------------------------------------------------------------
diff --git a/ApacheCMDA-Backend/app/models/ServiceEntry.java b/ApacheCMDA-Backend/app/models/ServiceEntry.java
new file mode 100644
index 0000000..1bf19a8
--- /dev/null
+++ b/ApacheCMDA-Backend/app/models/ServiceEntry.java
@@ -0,0 +1,132 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package models;
+
+import javax.persistence.*;
+import java.util.Date;
+
+/**
+ * Created by xing on 4/15/15.
+ */
+@Entity
+public class ServiceEntry {
+    @Id
+    @GeneratedValue(strategy = GenerationType.AUTO)
+    private long id;
+    @ManyToOne(fetch = FetchType.EAGER, cascade = {CascadeType.MERGE})
+    @JoinColumn(name = "serviceId", referencedColumnName = "id")
+    private ClimateService climateService;
+    private String versionNo;
+    @ManyToOne(fetch = FetchType.EAGER, cascade = {CascadeType.MERGE})
+    @JoinColumn(name = "registorId", referencedColumnName = "id")
+    private User user;
+    @Temporal(TemporalType.TIMESTAMP)
+    private Date registerTimeStamp;
+    private String registerNote;
+    private int count;
+    @Temporal(TemporalType.TIMESTAMP)
+    private Date latestAccessTimeStamp;
+
+    public ServiceEntry(){
+    }
+
+    public ServiceEntry(Date latestAccessTimestamp, String versionNo, User user, Date registerTimeStamp, String registerNote, int count, ClimateService climateService) {
+        super();
+        if (latestAccessTimestamp == null)
+            latestAccessTimestamp = new Date();
+        this.latestAccessTimeStamp = latestAccessTimestamp;
+        this.versionNo = versionNo;
+        this.user = user;
+        if (registerTimeStamp == null)
+            registerTimeStamp = new Date();
+        this.registerTimeStamp = registerTimeStamp;
+        this.registerNote = registerNote;
+        this.count = count;
+        this.climateService = climateService;
+    }
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public ClimateService getClimateService() {
+        return climateService;
+    }
+
+    public void setClimateService(ClimateService climateService) {
+        this.climateService = climateService;
+    }
+
+    public String getVersionNo() {
+        return versionNo;
+    }
+
+    public void setVersionNo(String versionNo) {
+        this.versionNo = versionNo;
+    }
+
+    public User getUser() {
+        return user;
+    }
+
+    public void setUser(User user) {
+        this.user = user;
+    }
+
+    public Date getRegisterTimeStamp() {
+        return registerTimeStamp;
+    }
+
+    public void setRegisterTimeStamp(Date registerTimeStamp) {
+        this.registerTimeStamp = registerTimeStamp;
+    }
+
+    public String getRegisterNote() {
+        return registerNote;
+    }
+
+    public void setRegisterNote(String registerNote) {
+        this.registerNote = registerNote;
+    }
+
+    public int getCount() {
+        return count;
+    }
+
+    public void setCount(int count) {
+        this.count = count;
+    }
+
+    public Date getLatestAccessTimestamp() {
+        return latestAccessTimeStamp;
+    }
+
+    public void setLatestAccessTimestamp(Date latestAccessTimestamp) {
+        this.latestAccessTimeStamp = latestAccessTimestamp;
+    }
+
+    public String toString(){
+        return "ServiceEntry [id=" + id + ", service=" + climateService
+                + ", version=" + versionNo + ", user=" + user + ", registerTimeStamp=" + registerTimeStamp
+                + ", registerNote=" + registerNote + ", count=" + count + ", latestAccessTimeStamp="
+                + latestAccessTimeStamp + "]";
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/37774c92/ApacheCMDA-Backend/app/models/ServiceEntryRepository.java
----------------------------------------------------------------------
diff --git a/ApacheCMDA-Backend/app/models/ServiceEntryRepository.java b/ApacheCMDA-Backend/app/models/ServiceEntryRepository.java
new file mode 100644
index 0000000..4438b34
--- /dev/null
+++ b/ApacheCMDA-Backend/app/models/ServiceEntryRepository.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package models;
+
+
+import org.springframework.data.repository.CrudRepository;
+import javax.inject.Named;
+import javax.inject.Singleton;
+import java.util.List;
+
+/**
+ * Created by xing on 4/15/15.
+ */
+
+@Named
+@Singleton
+public interface ServiceEntryRepository extends CrudRepository<ServiceEntry, Long> {
+	List<ServiceEntry> findByClimateServiceAndVersionNo(ClimateService climateService, String versionNo);
+}
+
+
+
+

http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/37774c92/ApacheCMDA-Backend/app/models/ServiceExecutionLog.java
----------------------------------------------------------------------
diff --git a/ApacheCMDA-Backend/app/models/ServiceExecutionLog.java b/ApacheCMDA-Backend/app/models/ServiceExecutionLog.java
new file mode 100644
index 0000000..b8c6f07
--- /dev/null
+++ b/ApacheCMDA-Backend/app/models/ServiceExecutionLog.java
@@ -0,0 +1,204 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package models;
+
+import java.util.Date;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToOne;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+@Entity
+public class ServiceExecutionLog {
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.AUTO)
+	private long id;
+	@ManyToOne(optional = false)
+	@JoinColumn(name = "serviceId", referencedColumnName = "id")
+	private ClimateService climateService;
+	@ManyToOne(optional = false)
+	@JoinColumn(name = "userId", referencedColumnName = "id")
+	private User user;
+	@OneToOne(cascade=CascadeType.ALL)
+	@JoinColumn(name = "serviceConfigurationId", referencedColumnName = "id")
+	private ServiceConfiguration serviceConfiguration;
+//	@ManyToOne(optional = false)
+//	@JoinColumn(name = "datasetLogId", referencedColumnName = "id")
+//	private DatasetLog datasetLog;
+	private String purpose;
+	@Temporal(TemporalType.TIMESTAMP)
+	private Date executionStartTime;
+	@Temporal(TemporalType.TIMESTAMP)
+	private Date executionEndTime;
+	private String plotUrl;
+	private String dataUrl;
+	private Date datasetStudyStartTime;
+	private Date datasetStudyEndTime;
+	
+
+	public ServiceExecutionLog(
+			ClimateService climateService, User user,
+			ServiceConfiguration serviceConfiguration, // DatasetLog datasetLog,
+			String purpose, Date executionStartTime, Date executionEndTime,
+			String dataUrl, String plotUrl,
+			Date datasetStudyStartTime, Date datasetStudyEndTime) {
+	this.climateService = climateService;
+		this.user = user;
+		this.serviceConfiguration = serviceConfiguration;
+		//this.datasetLog = datasetLog;
+		this.purpose = purpose;
+		this.executionStartTime = executionStartTime;
+		this.executionEndTime = executionEndTime;
+		this.plotUrl = plotUrl;
+		this.dataUrl = dataUrl;
+		this.datasetStudyStartTime = datasetStudyStartTime;
+		this.datasetStudyEndTime = datasetStudyEndTime;
+	}
+	
+	public ServiceExecutionLog() {
+
+	}
+	
+	public long getId() {
+		return id;
+	}
+
+	public ClimateService getClimateService() {
+		return climateService;
+	}
+
+	public User getUser() {
+		return user;
+	}
+
+	public ServiceConfiguration getServiceConfiguration() {
+		return serviceConfiguration;
+	}
+
+//	public DatasetLog getDatasetLog() {
+//		return datasetLog;
+//	}
+
+	public String getPurpose() {
+		return purpose;
+	}
+
+	public Date getExecutionStartTime() {
+		return executionStartTime;
+	}
+
+	public Date getExecutionEndTime() {
+		return executionEndTime;
+	}
+
+	public String getPlotUrl() {
+		return plotUrl;
+	}
+
+	public String getDataUrl() {
+		return dataUrl;
+	}
+	
+	public Date getDatasetStudyStartTime() {
+		return datasetStudyStartTime;
+	}
+	
+	public Date getDatasetStudyEndTime() {
+		return datasetStudyEndTime;
+	}
+	
+	public void setId(long id) {
+		this.id = id;
+	}
+
+	public void setClimateService(ClimateService climateService) {
+		this.climateService = climateService;
+	}
+
+	public void setUser(User user) {
+		this.user = user;
+	}
+
+	public void setServiceConfiguration(ServiceConfiguration serviceConfiguration) {
+		this.serviceConfiguration = serviceConfiguration;
+	}
+
+//	public void setDatasetLog(DatasetLog datasetLog) {
+//		this.datasetLog = datasetLog;
+//	}
+
+	public void setPurpose(String purpose) {
+		this.purpose = purpose;
+	}
+
+	public void setExecutionStartTime(Date executionStartTime) {
+		this.executionStartTime = executionStartTime;
+	}
+
+	public void setExecutionEndTime(Date executionEndTime) {
+		this.executionEndTime = executionEndTime;
+	}
+
+	public void setPlotUrl(String plotUrl) {
+		this.plotUrl = plotUrl;
+	}
+
+	public void setDataUrl(String dataUrl) {
+		this.dataUrl = dataUrl;
+	}
+	
+	public void setDatasetStudyStartTime(Date datasetStudyStartTime) {
+		this.datasetStudyStartTime = datasetStudyStartTime;
+	}
+
+	public void setDatasetStudyEndTime(Date datasetStudyEndTime) {
+		this.datasetStudyEndTime  = datasetStudyEndTime;
+	}
+
+	@Override
+	public String toString() {
+		return "ServiceExecutionLog [id=" + id + ", climateService="
+				+ climateService + ", user=" + user + ", serviceConfiguration="
+				+ serviceConfiguration + ", purpose=" + purpose
+				+ ", executionStartTime=" + executionStartTime
+				+ ", executionEndTime=" + executionEndTime + ", plotUrl="
+				+ plotUrl + ", dataUrl=" + dataUrl 
+				+ ", datasetStudyStartTime=" + datasetStudyStartTime
+				+ ", datasetStudyEndTime=" + datasetStudyEndTime
+				+ "]";
+	}
+
+	
+//	@Override
+//	public String toString() {
+//		return "ServiceExecutionLog [id=" + id + ", climateService="
+//				+ climateService + ", user=" + user
+//				+ ", serviceConfiguration=" + serviceConfiguration
+//				+ ", datasetLog=" + datasetLog + ", purpose=" + purpose
+//				+ ", executionStartTime=" + executionStartTime
+//				+ ", executionEndTime=" + executionEndTime + "]";
+//	}
+	
+}

http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/37774c92/ApacheCMDA-Backend/app/models/ServiceExecutionLogRepository.java
----------------------------------------------------------------------
diff --git a/ApacheCMDA-Backend/app/models/ServiceExecutionLogRepository.java b/ApacheCMDA-Backend/app/models/ServiceExecutionLogRepository.java
new file mode 100644
index 0000000..158d530
--- /dev/null
+++ b/ApacheCMDA-Backend/app/models/ServiceExecutionLogRepository.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package models;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Set;
+
+import org.springframework.data.repository.CrudRepository;
+
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+@Named
+@Singleton
+public interface ServiceExecutionLogRepository extends CrudRepository<ServiceExecutionLog, Long> {
+    
+	List<ServiceExecutionLog> findByUser_Id(long userId);
+
+//    List<ServiceExecutionLog> findByExecutionStartTimeBetweenAndExecutionEndTimeBetweenAndPurposeLikeAndUser_IdAndServiceConfigurationIn(Date startA, Date startB, Date endA, Date endB, String purpose, long userId, Set<ServiceConfiguration> serviceConfigurations);
+//
+//    List<ServiceExecutionLog> findByExecutionStartTimeBetweenAndExecutionEndTimeBetweenAndPurposeLikeAndServiceConfigurationIn(Date startA, Date startB, Date endA, Date endB, String purpose, Set<ServiceConfiguration> serviceConfigurations);
+//
+//    List<ServiceExecutionLog> findByExecutionStartTimeBetweenAndExecutionEndTimeBetweenAndPurposeLikeAndUser_Id(Date startA, Date startB, Date endA, Date endB, String purpose, long userId);
+//
+//    List<ServiceExecutionLog> findByExecutionStartTimeBetweenAndExecutionEndTimeBetweenAndPurposeLike(Date startA, Date startB, Date endA, Date endB, String purpose);
+
+    List<ServiceExecutionLog> findByServiceConfigurationIn(List<ServiceConfiguration> serviceConfigurations);
+
+    List<ServiceExecutionLog> findByExecutionStartTimeGreaterThanEqualAndExecutionEndTimeLessThanEqualAndPurposeLikeAndUser_IdAndServiceConfigurationIn(Date start, Date end, String purpose, long userId, Set<ServiceConfiguration> serviceConfigurations);
+
+    List<ServiceExecutionLog> findByExecutionStartTimeGreaterThanEqualAndExecutionEndTimeLessThanEqualAndPurposeLikeAndServiceConfigurationIn(Date start, Date end, String purpose, Set<ServiceConfiguration> serviceConfigurations);
+
+    List<ServiceExecutionLog> findByExecutionStartTimeGreaterThanEqualAndExecutionEndTimeLessThanEqualAndPurposeLikeAndUser_Id(Date start, Date end, String purpose, long userId);
+
+    List<ServiceExecutionLog> findByExecutionStartTimeGreaterThanEqualAndExecutionEndTimeLessThanEqualAndPurposeLike(Date start, Date end, String purpose);
+
+    List<ServiceExecutionLog> findAllByOrderByExecutionStartTimeDesc();
+}

http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/37774c92/ApacheCMDA-Backend/app/models/User.java
----------------------------------------------------------------------
diff --git a/ApacheCMDA-Backend/app/models/User.java b/ApacheCMDA-Backend/app/models/User.java
new file mode 100644
index 0000000..9079f34
--- /dev/null
+++ b/ApacheCMDA-Backend/app/models/User.java
@@ -0,0 +1,193 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package models;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+
+@Entity
+public class User {
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.AUTO)
+	private long id;
+	private String userName;
+	private String password;
+	private String firstName;
+	private String lastName;
+	private String middleInitial;
+	private String affiliation;
+	private String title;
+	private String email;
+	private String mailingAddress;
+	private String phoneNumber;
+	private String faxNumber;
+	private String researchFields;
+	private String highestDegree;
+
+	// @OneToMany(mappedBy = "user", cascade={CascadeType.ALL})
+	// private Set<ClimateService> climateServices = new
+	// HashSet<ClimateService>();
+
+	public User() {
+	}
+
+	public User(String userName, String password, String firstName,
+			String lastName, String middleInitial, String affiliation,
+			String title, String email, String mailingAddress,
+			String phoneNumber, String faxNumber, String researchFields,
+			String highestDegree) {
+		super();
+		this.userName = userName;
+		this.password = password;
+		this.firstName = firstName;
+		this.lastName = lastName;
+		this.middleInitial = middleInitial;
+		this.affiliation = affiliation;
+		this.title = title;
+		this.email = email;
+		this.mailingAddress = mailingAddress;
+		this.phoneNumber = phoneNumber;
+		this.faxNumber = faxNumber;
+		this.researchFields = researchFields;
+		this.highestDegree = highestDegree;
+	}
+
+	public long getId() {
+		return id;
+	}
+
+	public String getUserName() {
+		return userName;
+	}
+
+	public String getPassword() {
+		return password;
+	}
+
+	public String getFirstName() {
+		return firstName;
+	}
+
+	public String getLastName() {
+		return lastName;
+	}
+
+	public String getMiddleInitial() {
+		return middleInitial;
+	}
+
+	public String getAffiliation() {
+		return affiliation;
+	}
+
+	public String getTitle() {
+		return title;
+	}
+
+	public String getEmail() {
+		return email;
+	}
+
+	public String getMailingAddress() {
+		return mailingAddress;
+	}
+
+	public String getPhoneNumber() {
+		return phoneNumber;
+	}
+
+	public String getFaxNumber() {
+		return faxNumber;
+	}
+
+	public String getResearchFields() {
+		return researchFields;
+	}
+
+	public String getHighestDegree() {
+		return highestDegree;
+	}
+
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+
+	public void setPassword(String password) {
+		this.password = password;
+	}
+
+	public void setFirstName(String firstName) {
+		this.firstName = firstName;
+	}
+
+	public void setLastName(String lastName) {
+		this.lastName = lastName;
+	}
+
+	public void setMiddleInitial(String middleInitial) {
+		this.middleInitial = middleInitial;
+	}
+
+	public void setAffiliation(String affiliation) {
+		this.affiliation = affiliation;
+	}
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	public void setEmail(String email) {
+		this.email = email;
+	}
+
+	public void setMailingAddress(String mailingAddress) {
+		this.mailingAddress = mailingAddress;
+	}
+
+	public void setPhoneNumber(String phoneNumber) {
+		this.phoneNumber = phoneNumber;
+	}
+
+	public void setFaxNumber(String faxNumber) {
+		this.faxNumber = faxNumber;
+	}
+
+	public void setResearchFields(String researchFields) {
+		this.researchFields = researchFields;
+	}
+
+	public void setHighestDegree(String highestDegree) {
+		this.highestDegree = highestDegree;
+	}
+
+	@Override
+	public String toString() {
+		return "User [id=" + id + ", userName=" + userName + ", password="
+				+ password + ", firstName=" + firstName + ", lastName="
+				+ lastName + ", middleInitial=" + middleInitial
+				+ ", affiliation=" + affiliation + ", title=" + title
+				+ ", email=" + email + ", mailingAddress=" + mailingAddress
+				+ ", phoneNumber=" + phoneNumber + ", faxNumber=" + faxNumber
+				+ ", researchFields=" + researchFields + ", highestDegree="
+				+ highestDegree + "]";
+	}
+
+}
+

http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/37774c92/ApacheCMDA-Backend/app/models/UserRepository.java
----------------------------------------------------------------------
diff --git a/ApacheCMDA-Backend/app/models/UserRepository.java b/ApacheCMDA-Backend/app/models/UserRepository.java
new file mode 100644
index 0000000..2547dff
--- /dev/null
+++ b/ApacheCMDA-Backend/app/models/UserRepository.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package models;
+
+import java.util.List;
+
+import org.springframework.data.repository.CrudRepository;
+
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+/**
+ * Provides CRUD functionality for accessing people. Spring Data auto-magically takes care of many standard
+ * operations here.
+ */
+@Named
+@Singleton
+public interface UserRepository extends CrudRepository<User, Long> {
+	List<User> findByUserName(String userName);
+	User findByEmail(String email);
+}

http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/37774c92/ApacheCMDA-Backend/app/models/Workflow.java
----------------------------------------------------------------------
diff --git a/ApacheCMDA-Backend/app/models/Workflow.java b/ApacheCMDA-Backend/app/models/Workflow.java
new file mode 100644
index 0000000..d4ca7be
--- /dev/null
+++ b/ApacheCMDA-Backend/app/models/Workflow.java
@@ -0,0 +1,136 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package models;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.JoinTable;
+import javax.persistence.ManyToMany;
+
+
+@Entity
+public class Workflow {
+	
+	@Id
+	@GeneratedValue(strategy = GenerationType.AUTO)
+	private long id;
+	private String name;
+	private String purpose;
+	private Date createTime;
+	private String versionNo;
+	private long rootWorkflowId;
+	@ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.MERGE})
+	@JoinTable(name = "WorkflowAndUser", joinColumns = { @JoinColumn(name ="workflowId", referencedColumnName = "id")}, inverseJoinColumns = { @JoinColumn(name = "userId", referencedColumnName = "id") })
+	private List<User> userSet;
+	@ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.MERGE})
+	@JoinTable(name = "WorkflowAndClimateService", joinColumns = { @JoinColumn(name ="workflowId", referencedColumnName = "id")}, inverseJoinColumns = { @JoinColumn(name = "climateServiceId", referencedColumnName = "id") })
+	private List<ClimateService> climateServiceSet;
+
+	public Workflow() {
+	}
+
+	public Workflow(String name, String purpose, Date createTime,
+			String versionNo, long rootWorkflowId, List<User> userSet,
+			List<ClimateService> climateServiceSet) {
+		super();
+		this.name = name;
+		this.purpose = purpose;
+		this.createTime = createTime;
+		this.versionNo = versionNo;
+		this.rootWorkflowId = rootWorkflowId;
+		this.userSet = userSet;
+		this.climateServiceSet = climateServiceSet;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getPurpose() {
+		return purpose;
+	}
+
+	public void setPurpose(String purpose) {
+		this.purpose = purpose;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getVersionNo() {
+		return versionNo;
+	}
+
+	public void setVersionNo(String versionNo) {
+		this.versionNo = versionNo;
+	}
+
+	public long getRootWorkflowId() {
+		return rootWorkflowId;
+	}
+
+	public void setRootWorkflowId(long rootWorkflowId) {
+		this.rootWorkflowId = rootWorkflowId;
+	}
+
+	public List<User> getUserSet() {
+		return userSet;
+	}
+
+	public void setUserSet(List<User> userSet) {
+		this.userSet = userSet;
+	}
+
+	public List<ClimateService> getClimateServiceSet() {
+		return climateServiceSet;
+	}
+
+	public void setClimateServiceSet(List<ClimateService> climateServiceSet) {
+		this.climateServiceSet = climateServiceSet;
+	}
+
+	public long getId() {
+		return id;
+	}
+
+	@Override
+	public String toString() {
+		return "Workflow [id=" + id + ", name=" + name + ", purpose=" + purpose
+				+ ", createTime=" + createTime + ", versionNo=" + versionNo
+				+ ", rootWorkflowId=" + rootWorkflowId + ", userSet=" + userSet
+				+ ", climateServiceSet=" + climateServiceSet + "]";
+	}
+	
+	
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/37774c92/ApacheCMDA-Backend/app/models/WorkflowRepository.java
----------------------------------------------------------------------
diff --git a/ApacheCMDA-Backend/app/models/WorkflowRepository.java b/ApacheCMDA-Backend/app/models/WorkflowRepository.java
new file mode 100644
index 0000000..79e1e11
--- /dev/null
+++ b/ApacheCMDA-Backend/app/models/WorkflowRepository.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package models;
+
+import org.springframework.data.repository.CrudRepository;
+
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+@Named
+@Singleton
+public interface WorkflowRepository extends CrudRepository<Workflow, Long> {
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/37774c92/ApacheCMDA-Backend/app/util/Common.java
----------------------------------------------------------------------
diff --git a/ApacheCMDA-Backend/app/util/Common.java b/ApacheCMDA-Backend/app/util/Common.java
new file mode 100644
index 0000000..212f765
--- /dev/null
+++ b/ApacheCMDA-Backend/app/util/Common.java
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package util;
+
+import java.text.SimpleDateFormat;
+
+public class Common {
+	public static final String DATE_PATTERN = "yyyy-MM-dd'T'HH:mm:ssz";
+	public static final String DATASET_DATE_PATTERN = "yyyyMM";
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/37774c92/ApacheCMDA-Backend/app/util/Constants.java
----------------------------------------------------------------------
diff --git a/ApacheCMDA-Backend/app/util/Constants.java b/ApacheCMDA-Backend/app/util/Constants.java
new file mode 100644
index 0000000..d282644
--- /dev/null
+++ b/ApacheCMDA-Backend/app/util/Constants.java
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package util;
+
+public class Constants {
+	
+	public static final String htmlHead = "<head>\r\n    <meta charset=\"utf-8\">\r\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->\r\n    <title>Climate Service</title>\r\n\r\n    <!-- Bootstrap -->\r\n    <link href=\"css/bootstrap.min.css\" rel=\"stylesheet\">\r\n\r\n    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->\r\n    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->\r\n    <!--[if lt IE 9]>\r\n    <script src=\"https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js\"></script>\r\n    <script src=\"https://oss.maxcdn.com/respond/1.4.2/respond.min.js\"></script>\r\n    <![endif]-->\r\n</head>\r\n<body>\r\n\r\n<h2 class=\"text-center\">Service: 2-D Variable Map</h2>\r\n\r\n<p class=\"text-center col-md
 -8 col-md-offset-2\">This service generates a map of a 2-dimensional variable with time\r\n    averaging and spatial\r\n    subsetting. Select a data source (model or observation), a variable name, a time range, and a spatial range\r\n    (lat-lon box) below.\r\n</p>\r\n\r\n<div class=\"container col-md-6\">\r\n    <form>\r\n        <table class=\"table table-bordered table-striped\">\r\n            <thead>\r\n            <tr>\r\n                <th class=\"col-md-2\">Parameter Name</th>\r\n                <th class=\"col-md-4\">Value</th>\r\n            </tr>\r\n            </thead>\r\n            <tbody>\r\n";
+	
+	public static final String htmlTail = "</tbody>\r\n        </table>\r\n        <div class=\"text-center\">\r\n            <button type=\"submit\" class=\"btn btn-success btn-lg\">Get Plot</button>\r\n        </div>\r\n    </form>\r\n</div>\r\n\r\n<div class=\"container col-md-6\">\r\n    <form>\r\n        <table class=\"table table-bordered table-striped\">\r\n            <thead>\r\n            <tr>\r\n                <th>Output</th>\r\n            </tr>\r\n            </thead>\r\n            <tbody>\r\n            <tr>\r\n                <td>\r\n                    <a href=\"http://einstein.sv.cmu.edu:9002/static/twoDimMap/6879a2eedd1910f4c45e6213d342e066/nasa_modis_clt_200401_200412_Annual.jpeg\">\r\n                        <img src=\"http://einstein.sv.cmu.edu:9002/static/twoDimMap/6879a2eedd1910f4c45e6213d342e066/nasa_modis_clt_200401_200412_Annual.jpeg\"\r\n                             class=\"img-responsive\">\r\n                    </a>\r\n                </td>\r\n          
   </tr>\r\n            <tr>\r\n                <td>\r\n                    <a href=\"http://einstein.sv.cmu.edu:9002/static/twoDimMap/6879a2eedd1910f4c45e6213d342e066/nasa_modis_clt_200401_200412_Annual.jpeg\">\r\n                        <textarea class=\"form-control\" rows=\"3\" id=\"comment\">http://einstein.sv.cmu.edu:9002/static/twoDimMap/6879a2eedd1910f4c45e6213d342e066/nasa_modis_clt_200401_200412_Annual.jpeg</textarea>\r\n                    </a>\r\n                </td>\r\n            </tr>\r\n            <tr>\r\n                <td>\r\n                    <textarea class=\"form-control\" rows=\"10\" id=\"comment\">\r\n                        {\r\n    \"dataUrl\": \"http://einstein.sv.cmu.edu:9002/static/twoDimMap/3cce4d6630dd6a3f9b9b2155a2d95ff6/nasa_modis_clt_200401_200412_JFMAJASOND.nc\",\r\n    \"message\": \"program name: octaveWrapper\\nsourceName: nasa_modis\\nvarName: clt\\nstartTimeStr: 200401\\nstopTimeStr: 200412\\nlonRange: 0,360\\nlonRange: 0.000000\\nlonRange:
  360.000000\\nlatRange: -90,90\\n1. NASA_MODIS\\n2. clt\\n3. 200401\\n4. 200412\\n5. 0,360\\n6. -90,90\\n7. 1,2,3,4,7,8,9,10,11,12\\n8. /media/sdb/trunk/services/svc/svc/static/twoDimMap/3cce4d6630dd6a3f9b9b2155a2d95ff6\\n9. 0\\nstart year = 2000.000000\\n, month = 3.000000\\nstop year = 2011.000000\\n, month = 9.000000\\nfigFile: nasa_modis_clt_200401_200412_JFMAJASOND.jpeg\\nfigFilePath: /media/sdb/trunk/services/svc/svc/static/twoDimMap/3cce4d6630dd6a3f9b9b2155a2d95ff6/nasa_modis_clt_200401_200412_JFMAJASOND.jpeg\\ndataFile: nasa_modis_clt_200401_200412_JFMAJASOND.nc\\ndataFilePath: /media/sdb/trunk/services/svc/svc/static/twoDimMap/3cce4d6630dd6a3f9b9b2155a2d95ff6/nasa_modis_clt_200401_200412_JFMAJASOND.nc\\nnumber of month = 12\\nnumber of files = 1\\n+-----------------------------------------------------------------------------+\\n|                                                                             |\\n|       Total Cloud Fraction, 2004/01-2004/12 climatology (%), JFM
 AJASOND     |\\n|   latitude(deg)                                                             |\\n|         +-----------------------------------------------------------+       |\\n|         | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++|       |\\n|      50 |+++++++         ++    +++++++++++++++++++++++++++++++  ++++|       |\\n|         |++++++++++ ++      ++++++             ++    +++++++   ++ ++|       |\\n|         | +++++++++++ +++ +++++          ++     +++++++++++      ++ |       |\\n|       0 |+++ +++++  +++++++++++                     +++++++++    +++|       |\\n|         |++  ++++       +++++++++++++ +              ++++  ++++     |       |\\n|         | ++ ++++++        ++++++++++ +    +            +  +++      |       |\\n|         |  +++     ++      +++++++  ++++               +++++        |       |\\n|     -50 |+         ++                                  ++++++ +    +|       |\\n|         |++++++++++++++++++++++++++++    +++++++++++++++++++++++++++|       |
 \\n|         +-----------------------------------------------------------+       |\\n|         0      50       100     150     200      250     300     350        |\\n|                                longitude(deg)                               |\\n|         +-----------------------------------------------------------+       |\\n|         +-----------------------------------------------------------+       |\\n|            10    20     30    40     50    60    70     80    90            |\\n|                           Total Cloud Fraction (%)                          |\\n|                                                                             |\\n+-----------------------------------------------------------------------------+\\n\\n  scalar structure containing the fields:\\n\\n    Name = /\\n    Format = classic\\n    Dimensions =\\n\\n      1x2 struct array containing the fields:\\n\\n        Name\\n        Length\\n        Unlimited\\n\\n    Variables =\\n\\n      1x3 struct ar
 ray containing the fields:\\n\\n        Name\\n        Datatype\\n        Dimensions\\n        Attributes\\n\\n\",\r\n    \"success\": true,\r\n    \"url\": \"http://einstein.sv.cmu.edu:9002/static/twoDimMap/3cce4d6630dd6a3f9b9b2155a2d95ff6/nasa_modis_clt_200401_200412_JFMAJASOND.jpeg\"\r\n}\r\n                    </textarea>\r\n                </td>\r\n            </tr>\r\n            </tbody>\r\n        </table>\r\n        <div class=\"text-center\">\r\n            <button type=\"submit\" class=\"btn btn-success btn-lg\">Download Data</button>\r\n        </div>\r\n    </form>\r\n</div>\r\n\r\n<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->\r\n<script src=\"https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js\"></script>\r\n<!-- Include all compiled plugins (below), or include individual files as needed -->\r\n<script src=\"js/bootstrap.min.js\"></script>\r\n</body>\r\n</html>\r\n";
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/37774c92/ApacheCMDA-Backend/app/views/index.scala.html
----------------------------------------------------------------------
diff --git a/ApacheCMDA-Backend/app/views/index.scala.html b/ApacheCMDA-Backend/app/views/index.scala.html
new file mode 100644
index 0000000..9fb293c
--- /dev/null
+++ b/ApacheCMDA-Backend/app/views/index.scala.html
@@ -0,0 +1,7 @@
+@(message: String)
+
+@main("Welcome to Play") {
+
+    @play20.welcome(message, style = "Java")
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/37774c92/ApacheCMDA-Backend/app/views/main.scala.html
----------------------------------------------------------------------
diff --git a/ApacheCMDA-Backend/app/views/main.scala.html b/ApacheCMDA-Backend/app/views/main.scala.html
new file mode 100644
index 0000000..5025aa5
--- /dev/null
+++ b/ApacheCMDA-Backend/app/views/main.scala.html
@@ -0,0 +1,15 @@
+@(title: String)(content: Html)
+
+<!DOCTYPE html>
+
+<html>
+    <head>
+        <title>@title</title>
+        <link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")">
+        <link rel="shortcut icon" type="image/png" href="@routes.Assets.at("images/favicon.png")">
+        <script src="@routes.Assets.at("javascripts/hello.js")" type="text/javascript"></script>
+    </head>
+    <body>
+        @content
+    </body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/37774c92/ApacheCMDA-Backend/app/workflow/Connection.java
----------------------------------------------------------------------
diff --git a/ApacheCMDA-Backend/app/workflow/Connection.java b/ApacheCMDA-Backend/app/workflow/Connection.java
new file mode 100644
index 0000000..ae4e7b2
--- /dev/null
+++ b/ApacheCMDA-Backend/app/workflow/Connection.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package workflow;
+
+public class Connection {
+	private long id;
+	private long from_node;
+	private String from;
+	private long to_node;
+	private String to;
+	
+	public long getId() {
+		return id;
+	}
+	
+	public void setId(long id) {
+		this.id = id;
+	}
+	
+	public long getFrom_node() {
+		return from_node;
+	}
+	
+	public void setFrom_node(long from_node) {
+		this.from_node = from_node;
+	}
+	
+	public String getFrom() {
+		return from;
+	}
+	
+	public void setFrom(String from) {
+		this.from = from;
+	}
+	
+	public long getTo_node() {
+		return to_node;
+	}
+	
+	public void setTo_node(long to_node) {
+		this.to_node = to_node;
+	}
+	
+	public String getTo() {
+		return to;
+	}
+	
+	public void setTo(String to) {
+		this.to = to;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/37774c92/ApacheCMDA-Backend/app/workflow/FieldIn.java
----------------------------------------------------------------------
diff --git a/ApacheCMDA-Backend/app/workflow/FieldIn.java b/ApacheCMDA-Backend/app/workflow/FieldIn.java
new file mode 100644
index 0000000..2b5bdb2
--- /dev/null
+++ b/ApacheCMDA-Backend/app/workflow/FieldIn.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package workflow;
+
+public class FieldIn {
+	private String name;
+	private String value;
+	
+	public String getName() {
+		return name;
+	}
+	
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	public String getValue() {
+		return value;
+	}
+	
+	public void setValue(String value) {
+		this.value = value;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/37774c92/ApacheCMDA-Backend/app/workflow/FieldOut.java
----------------------------------------------------------------------
diff --git a/ApacheCMDA-Backend/app/workflow/FieldOut.java b/ApacheCMDA-Backend/app/workflow/FieldOut.java
new file mode 100644
index 0000000..926ed4d
--- /dev/null
+++ b/ApacheCMDA-Backend/app/workflow/FieldOut.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package workflow;
+
+public class FieldOut {
+	private String name;
+	private String value;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	public String getValue() {
+		return value;
+	}
+
+	public void setValue(String value) {
+		this.value = value;
+	}
+	
+}

http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/37774c92/ApacheCMDA-Backend/app/workflow/Fields.java
----------------------------------------------------------------------
diff --git a/ApacheCMDA-Backend/app/workflow/Fields.java b/ApacheCMDA-Backend/app/workflow/Fields.java
new file mode 100644
index 0000000..a072094
--- /dev/null
+++ b/ApacheCMDA-Backend/app/workflow/Fields.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package workflow;
+
+public class Fields {
+	private FieldIn[] in;
+	private FieldOut[] out;
+	
+	public FieldIn[] getIn() {
+		return in;
+	}
+	
+	public void setIn(FieldIn[] in) {
+		this.in = in;
+	}
+	
+	public FieldOut[] getOut() {
+		return out;
+	}
+	
+	public void setOut(FieldOut[] out) {
+		this.out = out;
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/37774c92/ApacheCMDA-Backend/app/workflow/Group.java
----------------------------------------------------------------------
diff --git a/ApacheCMDA-Backend/app/workflow/Group.java b/ApacheCMDA-Backend/app/workflow/Group.java
new file mode 100644
index 0000000..a63fb87
--- /dev/null
+++ b/ApacheCMDA-Backend/app/workflow/Group.java
@@ -0,0 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package workflow;
+
+public class Group {
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cmda/blob/37774c92/ApacheCMDA-Backend/app/workflow/Node.java
----------------------------------------------------------------------
diff --git a/ApacheCMDA-Backend/app/workflow/Node.java b/ApacheCMDA-Backend/app/workflow/Node.java
new file mode 100644
index 0000000..7cc4f35
--- /dev/null
+++ b/ApacheCMDA-Backend/app/workflow/Node.java
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package workflow;
+
+public class Node {
+	private long nid;
+	private String name;
+	private String type;
+	private boolean anim;
+	private double x;
+	private double y;
+	private Fields fields;
+	
+	public long getNid() {
+		return nid;
+	}
+	
+	public void setNid(long nid) {
+		this.nid = nid;
+	}
+	
+	public String getName() {
+		return name;
+	}
+	
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	public String getType() {
+		return type;
+	}
+	
+	public void setType(String type) {
+		this.type = type;
+	}
+	
+	public boolean isAnim() {
+		return anim;
+	}
+	
+	public void setAnim(boolean anim) {
+		this.anim = anim;
+	}
+	
+	public double getX() {
+		return x;
+	}
+	
+	public void setX(double x) {
+		this.x = x;
+	}
+	
+	public double getY() {
+		return y;
+	}
+	
+	public void setY(double y) {
+		this.y = y;
+	}
+	
+	public Fields getFields() {
+		return fields;
+	}
+	
+	public void setFields(Fields fields) {
+		this.fields = fields;
+	}
+	
+}