controllers.ClimateServiceController.java Source code

Java tutorial

Introduction

Here is the source code for controllers.ClimateServiceController.java

Source

/*
 * 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 controllers;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import models.*;
import util.Common;
import util.Constants;
import play.mvc.*;

import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Singleton;
import javax.persistence.PersistenceException;

import org.apache.commons.lang3.StringEscapeUtils;

import com.fasterxml.jackson.databind.JsonNode;
import com.google.gson.Gson;

/**
 * The main set of web services.
 */
@Named
@Singleton
public class ClimateServiceController extends Controller {
    private final int initialcount = 0;

    // static final String DATE_PATTERN = "yyyy-MM-dd'T'HH:mm:ssz";
    private final ClimateServiceRepository climateServiceRepository;
    private final UserRepository userRepository;
    private final ServiceEntryRepository serviceEntryRepository;

    // We are using constructor injection to receive a repository to support our
    // desire for immutability.
    @Inject
    public ClimateServiceController(final ClimateServiceRepository climateServiceRepository,
            UserRepository userRepository, ServiceEntryRepository serviceEntryRepository) {
        this.climateServiceRepository = climateServiceRepository;
        this.userRepository = userRepository;
        this.serviceEntryRepository = serviceEntryRepository;
    }

    public Result addClimateService() {
        JsonNode json = request().body().asJson();
        if (json == null) {
            System.out.println("Climate service not saved, expecting Json data");
            return badRequest("Climate service not saved, expecting Json data");
        }

        // Parse JSON file
        long rootServiceId = json.findPath("rootServiceId").asLong();
        String creatorEmail = json.findPath("creatorEmail").asText();
        String name = json.findPath("name").asText();
        String purpose = json.findPath("purpose").asText();
        String url = json.findPath("url").asText();
        String scenario = json.findPath("scenario").asText();
        Date createTime = new Date();
        SimpleDateFormat format = new SimpleDateFormat(Common.DATE_PATTERN);
        try {
            createTime = format.parse(json.findPath("createTime").asText());
        } catch (ParseException e) {
            System.out.println("No creation date specified, set to current time");
        }
        String versionNo = json.findPath("versionNo").asText();

        try {
            User user = userRepository.findByEmail(creatorEmail);
            ClimateService climateService = new ClimateService(rootServiceId, user, name, purpose, url, scenario,
                    createTime, versionNo);
            ClimateService savedClimateService = climateServiceRepository.save(climateService);
            String registerNote = "ClimateService Name: " + savedClimateService.getName() + ", VersionNo: "
                    + versionNo;
            ServiceEntry serviceEntry = new ServiceEntry(createTime, versionNo, user, createTime, registerNote,
                    initialcount, savedClimateService);
            serviceEntryRepository.save(serviceEntry);
            System.out.println("Climate Service saved: " + savedClimateService.getName());
            return created(new Gson().toJson(savedClimateService.getId()));
        } catch (PersistenceException pe) {
            pe.printStackTrace();
            System.out.println("Climate Service not saved: " + name);
            return badRequest("Climate Service not saved: " + name);
        }
    }

    public Result savePage() {
        JsonNode json = request().body().asJson();
        if (json == null) {
            System.out.println("Climate service not saved, expecting Json data");
            return badRequest("Climate service not saved, expecting Json data");
        }

        // Parse JSON file
        String temp = json.findPath("pageString").asText();

        // Remove delete button from preview page
        String result = temp.replaceAll(
                "<td><button type=\\\\\"button\\\\\" class=\\\\\"btn btn-danger\\\\\" onclick=\\\\\"Javascript:deleteRow\\(this\\)\\\\\">delete</button></td>",
                "");

        result = StringEscapeUtils.unescapeJava(result);
        result = result.substring(1, result.length() - 1);
        System.out.println(result);

        String str1 = Constants.htmlHead;
        String str2 = Constants.htmlTail;

        result = str1 + result + str2;

        String timeStamp = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss").format(new Date());
        String location = "climateServicePageRepository/" + timeStamp + ".txt";

        File theDir = new File("climateServicePageRepository");

        // if the directory does not exist, create it
        if (!theDir.exists()) {
            System.out.println("creating directory: climateServicePageRepository");
            boolean create = false;

            try {
                theDir.mkdir();
                create = true;
            } catch (SecurityException se) {
                // handle it
            }
            if (create) {
                System.out.println("DIR created");
            }
        } else {
            System.out.println("No");
        }

        try {
            File file = new File(location);
            BufferedWriter output = new BufferedWriter(new FileWriter(file));
            output.write(result);
            output.close();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return ok(result);
    }

    public Result deleteClimateServiceById(long id) {
        ClimateService climateService = climateServiceRepository.findOne(id);
        if (climateService == null) {
            System.out.println("Climate service not found with id: " + id);
            return notFound("Climate service not found with id: " + id);
        }

        climateServiceRepository.delete(climateService);
        System.out.println("Climate service is deleted: " + id);
        return ok("Climate service is deleted: " + id);
    }

    public Result deleteClimateServiceByName(String name) {
        ClimateService climateService = climateServiceRepository.findFirstByName(name);
        if (climateService == null) {
            System.out.println("Climate service not found with name: " + name);
            return notFound("Climate service not found with name: " + name);
        }

        climateServiceRepository.delete(climateService);
        System.out.println("Climate service is deleted: " + name);
        return ok("Climate service is deleted: " + name);
    }

    public Result updateClimateServiceById(long id) {
        JsonNode json = request().body().asJson();
        if (json == null) {
            System.out.println("Climate service not saved, expecting Json data");
            return badRequest("Climate service not saved, expecting Json data");
        }

        // Parse JSON file
        long rootServiceId = json.findPath("rootServiceId").asLong();
        long creatorId = json.findPath("creatorId").asLong();
        String name = json.findPath("name").asText();
        String purpose = json.findPath("purpose").asText();
        String url = json.findPath("url").asText();
        String scenario = json.findPath("scenario").asText();
        String versionNo = json.findPath("versionNo").asText();
        // Creation time should be immutable and not updated.

        try {
            ClimateService climateService = climateServiceRepository.findOne(id);
            User user = userRepository.findOne(creatorId);
            ServiceEntry serviceEntry = null;
            if (versionNo.equals(climateService.getVersionNo())) {
                List<ServiceEntry> serviceEntries = serviceEntryRepository
                        .findByClimateServiceAndVersionNo(climateService, versionNo);
                if (serviceEntries.size() == 0) {
                    String registerNote = "ClimateService Name: " + climateService.getName() + ", VersionNo: "
                            + versionNo;
                    serviceEntry = new ServiceEntry(climateService.getCreateTime(), versionNo, user,
                            climateService.getCreateTime(), registerNote, initialcount, climateService);
                } else {
                    serviceEntry = serviceEntries.get(0);
                }
            } else {
                String registerNote = "ClimateService Name:" + climateService.getName() + ", VersionNo: "
                        + versionNo;
                serviceEntry = new ServiceEntry(climateService.getCreateTime(), versionNo, user,
                        climateService.getCreateTime(), registerNote, initialcount, climateService);
            }
            climateService.setUser(user);
            climateService.setName(name);
            climateService.setPurpose(purpose);
            climateService.setRootServiceId(rootServiceId);
            climateService.setScenario(scenario);
            climateService.setUrl(url);
            climateService.setVersionNo(versionNo);
            ClimateService savedClimateService = climateServiceRepository.save(climateService);
            serviceEntry.setClimateService(savedClimateService);
            ServiceEntry savedServiceEntry = serviceEntryRepository.save(serviceEntry);

            System.out.println("Climate Service updated: " + savedClimateService.getName());
            return created("Climate Service updated: " + savedClimateService.getName());
        } catch (PersistenceException pe) {
            pe.printStackTrace();
            System.out.println("Climate Service not updated: " + name);
            return badRequest("Climate Service not updated: " + name);
        }
    }

    public Result updateClimateServiceByName(String oldName) {
        JsonNode json = request().body().asJson();
        if (json == null) {
            System.out.println("Climate service not saved, expecting Json data");
            return badRequest("Climate service not saved, expecting Json data");
        }
        System.out.println(json);
        // Parse JSON file
        long rootServiceId = json.findPath("rootServiceId").asLong();
        long creatorId = json.findPath("creatorId").asLong();
        String name = json.findPath("name").asText();
        String purpose = json.findPath("purpose").asText();
        String url = json.findPath("url").asText();
        String scenario = json.findPath("scenario").asText();
        String versionNo = json.findPath("versionNo").asText();
        // Creation time is immutable and should not be updated

        if (oldName == null || oldName.length() == 0) {
            System.out.println("Old climate Service Name is null or empty!");
            return badRequest("Old climate Service Name is null or empty!");
        }

        try {
            ClimateService climateService = climateServiceRepository.findFirstByName(oldName);
            User user = userRepository.findOne(creatorId);
            ServiceEntry serviceEntry = null;
            if (versionNo.equals(climateService.getVersionNo())) {
                List<ServiceEntry> serviceEntries = serviceEntryRepository
                        .findByClimateServiceAndVersionNo(climateService, versionNo);
                if (serviceEntries.size() == 0) {
                    String registerNote = "ClimateService Name: " + climateService.getName() + ", VersionNo: "
                            + versionNo;
                    serviceEntry = new ServiceEntry(climateService.getCreateTime(), versionNo, user,
                            climateService.getCreateTime(), registerNote, initialcount, climateService);
                } else {
                    serviceEntry = serviceEntries.get(0);
                }
            } else {
                String registerNote = "ClimateService Name: " + climateService.getName() + ", VersionNo: "
                        + versionNo;
                serviceEntry = new ServiceEntry(climateService.getCreateTime(), versionNo, user,
                        climateService.getCreateTime(), registerNote, initialcount, climateService);
            }
            climateService.setName(name);
            climateService.setPurpose(purpose);
            climateService.setRootServiceId(rootServiceId);
            climateService.setScenario(scenario);
            climateService.setUrl(url);

            climateService.setUser(user);
            climateService.setVersionNo(versionNo);

            ClimateService savedClimateService = climateServiceRepository.save(climateService);
            serviceEntry.setClimateService(savedClimateService);
            ServiceEntry savedServiceEntry = serviceEntryRepository.save(serviceEntry);
            System.out.println("Climate Service updated: " + savedClimateService.getName());
            return created("Climate Service updated: " + savedClimateService.getName());
        } catch (PersistenceException pe) {
            pe.printStackTrace();
            System.out.println("Climate Service not updated: " + name);
            return badRequest("Climate Service not updated: " + name);
        }
    }

    public Result getClimateService(String name, String format) {
        if (name == null || name.length() == 0) {
            System.out.println("Climate Service Name is null or empty!");
            return badRequest("Climate Service Name is null or empty!");
        }

        List<ClimateService> climateService = climateServiceRepository.findAllByName(name);
        if (climateService == null) {
            System.out.println("Climate service not found with name: " + name);
            return notFound("Climate service not found with name: " + name);
        }

        String result = new String();
        if (format.equals("json")) {
            result = new Gson().toJson(climateService);
        }

        return ok(result);
    }

    public Result getClimateServiceById(long id) {
        ClimateService climateService = climateServiceRepository.findOne(id);
        if (climateService == null) {
            System.out.println("Climate service not found with id: " + id);
            return notFound("Climate service not found with id: " + id);
        }

        String result = new Gson().toJson(climateService);

        return ok(result);
    }

    public Result getAllClimateServices(String format) {
        Iterable<ClimateService> climateServices = climateServiceRepository.findAll();
        if (climateServices == null) {
            System.out.println("No climate service found");
        }

        String result = new String();
        if (format.equals("json")) {
            result = new Gson().toJson(climateServices);
        }

        return ok(result);

    }

    public Result getAllClimateServicesOrderByCreateTime(String format) {
        Iterable<ClimateService> climateServices = climateServiceRepository.findByOrderByCreateTimeDesc();
        if (climateServices == null) {
            System.out.println("No climate service found");
        }

        String result = new String();
        if (format.equals("json")) {
            result = new Gson().toJson(climateServices);
        }

        return ok(result);
    }

    public Result getAllClimateServicesOrderByLatestAccessTime(String format) {
        Iterable<ClimateService> climateServices = climateServiceRepository
                .getClimateServiceOrderByLatestAccessTime();
        if (climateServices == null) {
            System.out.println("No climate service found");
        }

        String result = new String();
        if (format.equals("json")) {
            result = new Gson().toJson(climateServices);
        }

        return ok(result);
    }

    public Result getAllClimateServicesOrderByCount(String format) {
        //        Iterable<ClimateService> climateServices = climateServiceRepository
        //                .findByOrderByCreateTimeDesc();
        Iterable<ClimateService> climateServices = climateServiceRepository.getClimateServiceOrderByCount();
        if (climateServices == null) {
            System.out.println("No climate service found");
        }

        String result = new String();
        if (format.equals("json")) {
            result = new Gson().toJson(climateServices);
        }

        return ok(result);
    }

    public Result addServiceEntry() {
        JsonNode json = request().body().asJson();
        if (json == null) {
            System.out.println("Climate service not saved, expecting Json data");
            return badRequest("Climate service not saved, expecting Json data");
        }

        // Parse JSON file
        String versionNo = json.findPath("versionNo").asText();
        String registerNote = json.findPath("registerNote").asText();
        int count = json.findPath("count").asInt();
        // String scenario = json.findPath("scenario").asText();
        long serviceId = json.findPath("serviceId").asLong();
        long creatorId = json.findPath("creatorId").asLong();

        Date registerTime = new Date();
        SimpleDateFormat format = new SimpleDateFormat(Common.DATE_PATTERN);
        try {
            registerTime = format.parse(json.findPath("registerTimeStamp").asText());
        } catch (ParseException e) {
            System.out.println("No creation date specified, set to current time");
        }

        Date latestAccessTime = new Date();
        try {
            latestAccessTime = format.parse(json.findPath("latestAccessTimeStamp").asText());
        } catch (ParseException e) {
            System.out.println("No creation date specified, set to current time");
        }

        try {
            ClimateService climateService = climateServiceRepository.findOne(serviceId);
            User creator = userRepository.findOne(creatorId);
            ServiceEntry entry = new ServiceEntry();
            entry.setClimateService(climateService);
            entry.setCount(count);
            entry.setRegisterNote(registerNote);
            entry.setVersionNo(versionNo);
            entry.setUser(creator);
            entry.setRegisterTimeStamp(registerTime);
            entry.setLatestAccessTimestamp(latestAccessTime);

            ServiceEntry savedServiceEntry = serviceEntryRepository.save(entry);

            System.out.println("Service Entry saved: " + savedServiceEntry.getId());
            return created(new Gson().toJson(savedServiceEntry));
        } catch (PersistenceException pe) {
            pe.printStackTrace();
            System.out.println("Service Entry not saved: " + serviceId);
            return badRequest("Service Entry not saved: " + serviceId);
        }
    }

    public Result getAllServiceEntries(String format) {
        Iterable<ServiceEntry> serviceEntries = serviceEntryRepository.findAll();
        if (serviceEntries == null) {
            System.out.println("No service entry found");
        }

        String result = new String();
        if (format.equals("json")) {
            result = new Gson().toJson(serviceEntries);
        }

        return ok(result);

    }

}