/*
* Copyright [2012-2014] PayPal Software Foundation
*
* 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 ml.shifu.shifu.container.obj;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import ml.shifu.shifu.util.Constants;
import org.apache.commons.lang.StringUtils;
import java.util.HashMap;
import java.util.Map;
/**
* ModelBasicConf class is config part for basic part in ModelConfig.json.
*/
@JsonIgnoreProperties(ignoreUnknown = true)
public class ModelBasicConf {
@JsonDeserialize(using = RunModeDeserializer.class)
public static enum RunMode {
LOCAL, DIST, MAPRED // MAPRED is the same as DIST while DIST is better to explain this mode as 'distributed'
// mode.
}
/**
* Model set name, which is used to differentiate each data set modeling in Shifu. Please be careful if you have two
* model set running with the same dataset. this case will be conflict in model running.
*/
private String name;
/**
* Generated based on current user.
*/
private String author;
/**
* What this model is, user can specified the description.
*/
private String description;
/**
* Version in ModelConfig.json
*/
private String version = Constants.version;
/**
* Run in local or Hadoop Cluster
*/
private RunMode runMode = RunMode.LOCAL;
/**
* If enable post training step
*/
private Boolean postTrainOn = Boolean.FALSE;
/**
* Customized paths like default model set path
*/
private Map<String, String> customPaths;
public ModelBasicConf() {
customPaths = new HashMap<String, String>(1);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public RunMode getRunMode() {
return runMode;
}
public void setRunMode(RunMode runMode) {
this.runMode = runMode;
}
public Map<String, String> getCustomPaths() {
return customPaths;
}
public void setCustomPaths(Map<String, String> customPaths) {
this.customPaths = customPaths;
}
/**
* @return the version
*/
public String getVersion() {
return version;
}
/**
* @param version
* the version to set
*/
public void setVersion(String version) {
this.version = version;
}
/**
* @return the postTrainOn
*/
public Boolean getPostTrainOn() {
return postTrainOn;
}
/**
* @param postTrainOn
* the postTrainOn to set
*/
public void setPostTrainOn(Boolean postTrainOn) {
this.postTrainOn = postTrainOn;
}
@Override
public boolean equals(Object obj) {
if(obj == null || !(obj instanceof ModelBasicConf)) {
return false;
}
if(obj == this) {
return true;
}
ModelBasicConf basic = (ModelBasicConf) obj;
return StringUtils.equals(basic.getName(), name) && StringUtils.equals(basic.getAuthor(), author)
&& StringUtils.equals(basic.getDescription(), description);
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((author == null) ? 0 : author.hashCode());
result = prime * result + ((description == null) ? 0 : description.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public ModelBasicConf clone() {
ModelBasicConf other = new ModelBasicConf();
other.setName(name);
other.setAuthor(author);
other.setDescription(description);
other.setRunMode(runMode);
other.setVersion(version);
other.setPostTrainOn(postTrainOn);
if(customPaths != null) {
other.setCustomPaths(new HashMap<String, String>(customPaths));
}
return other;
}
}