/* * Copyright 2014 Ricardo Lorenzo<unshakablespirit@gmail.com> * * Licensed 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 views.data; import play.data.validation.ValidationError; import utils.puppet.PuppetConfiguration; import java.util.ArrayList; import java.util.List; /** * Created by ricardolorenzo on 21/07/2014. */ public class ClusterCreationForm { private String clusterName; private Integer shardNodes; private Integer processes; private Integer nodeDisks; private Boolean cgroups = true; private String machineType; private String image; private String network; private String dataDiskType; private String dataDiskRaid; private Integer dataDiskSizeGb; private Integer rootDiskSizeGb; private String fileSystem; /** * Required for form instantiation. */ public ClusterCreationForm() { } public ClusterCreationForm(String clusterName, Integer shardNodes, Integer processes, Integer nodeDisks, String machineType, String image, String network, String dataDiskType, String dataDiskRaid, String fileSystem, Integer dataDiskSizeGb, Integer rootDiskSizeGb, Boolean cgroups) { this.clusterName = clusterName; this.shardNodes = shardNodes; this.processes = processes; this.nodeDisks = nodeDisks; this.machineType = machineType; this.image = image; this.network = network; this.dataDiskType = dataDiskType; this.dataDiskRaid = dataDiskRaid; this.fileSystem = fileSystem; this.dataDiskSizeGb = dataDiskSizeGb; this.rootDiskSizeGb = rootDiskSizeGb; this.cgroups = cgroups; } public String getClusterName() { return clusterName; } public void setClusterName(String clusterName) { this.clusterName = clusterName; } public String getFileSystem() { return fileSystem; } public void setFileSystem(String fileSystem) { this.fileSystem = fileSystem; } public String getDataDiskType() { return dataDiskType; } public String getDiskRaid() { return dataDiskRaid; } public void setDiskRaid(String dataDiskRaid) { this.dataDiskRaid = dataDiskRaid; } public void setDiskType(String dataDiskType) { this.dataDiskType = dataDiskType; } public String getMachineType() { return machineType; } public void setMachineType(String machineType) { this.machineType = machineType; } public String getImage() { return image; } public void setImage(String image) { this.image = image; } public String getNetwork() { return network; } public void setNetwork(String network) { this.network = network; } public Boolean isCgroups() { return cgroups; } public void setCgroups(Boolean cgroups) { this.cgroups = cgroups; } public Integer getProcesses() { return processes; } public void setProcesses(Integer processes) { this.processes = processes; } public Integer getNodeDisks() { return nodeDisks; } public void setNodeDisks(Integer node_disks) { this.nodeDisks = node_disks; } public Integer getShardNodes() { return shardNodes; } public void setShardNodes(Integer shard_nodes) { this.shardNodes = shard_nodes; } public Integer getDataDiskSizeGb() { return dataDiskSizeGb; } public void setDataDiskSizeGb(Integer dataDiskSizeGb) { this.dataDiskSizeGb = dataDiskSizeGb; } public Integer getRootDiskSizeGb() { return rootDiskSizeGb; } public void setRootDiskSizeGb(Integer rootDiskSizeGb) { this.rootDiskSizeGb = rootDiskSizeGb; } public List<ValidationError> validate() { List<ValidationError> errors = new ArrayList<>(); if(clusterName == null || clusterName.isEmpty()) { errors.add(new ValidationError("clusterName", "You must specify a name")); } if(shardNodes == null || shardNodes < 2) { errors.add(new ValidationError("shardNodes", "Incorrect number of shards")); } if(processes == null || processes <= 0) { errors.add(new ValidationError("processes", "Incorrect number of processes")); } if(nodeDisks == null || nodeDisks <= 0) { errors.add(new ValidationError("nodeDisks", "Incorrect number of disks per node")); } if(machineType == null || machineType.isEmpty()) { errors.add(new ValidationError("machineType", "You must choose the machine type")); } if(image == null || image.isEmpty()) { errors.add(new ValidationError("image", "You must choose an OS image")); } if(network == null || network.isEmpty()) { errors.add(new ValidationError("network", "You must choose a network")); } if(dataDiskRaid == null || dataDiskRaid.isEmpty()) { errors.add(new ValidationError("dataDiskType", "You must choose the disk type")); } else if(dataDiskType.equals(PuppetConfiguration.DISK_PER_PROCESS.getName())) { if(processes != nodeDisks) { errors.add(new ValidationError("dataDiskType", "The number of processes must match the number of disks for standalone disks mode")); } } if(fileSystem == null || fileSystem.isEmpty() || !PuppetConfiguration.SUPPORTED_FILESYSTEMS.contains(fileSystem)) { errors.add(new ValidationError("fileSystem", "You must choose the data filesystem type")); } if(dataDiskSizeGb == null || dataDiskSizeGb <= 0) { errors.add(new ValidationError("dataDiskSizeGb", "Incorrect data disk size")); } if(rootDiskSizeGb == null || rootDiskSizeGb <= 0) { errors.add(new ValidationError("rootDiskSizeGb", "Incorrect OS disk size")); } if(errors.size() > 0) { return errors; } return null; } }