/**
*
* Copyright (C) norad.fr
*
* 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 fr.norad.visuwall.core.persistence.entity;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ScheduledFuture;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Transient;
import javax.validation.constraints.NotNull;
import fr.norad.visuwall.api.domain.SoftwareProjectId;
import fr.norad.visuwall.api.plugin.capability.BasicCapability;
import org.codehaus.jackson.annotate.JsonIgnore;
import org.hibernate.annotations.CollectionOfElements;
import org.springframework.util.AutoPopulatingList;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
@Entity
public class SoftwareAccess {
@Id
@GeneratedValue
private Long id;
private String url;
@CollectionOfElements
private Map<String, String> properties = new HashMap<String, String>();
private String login;
private String password;
private boolean allProject;
@NotNull
private Integer projectFinderDelaySecond = 30;
@NotNull
private Integer projectStatusDelaySecond = 10;
@CollectionOfElements
private List<String> projectNames = new AutoPopulatingList<String>(String.class);
@CollectionOfElements
private List<String> viewNames = new AutoPopulatingList<String>(String.class);
@Transient
private ScheduledFuture<Object> projectFinderTask;
@Transient
private BasicCapability connection;
public SoftwareAccess() {
}
public SoftwareAccess(String url) {
this.url = url;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
SoftwareAccess other = (SoftwareAccess) obj;
if (id == null) {
if (other.id != null) {
return false;
}
} else if (!id.equals(other.id)) {
return false;
}
return true;
}
@Override
public String toString() {
ToStringHelper toString = Objects.toStringHelper(this) //
.add("id", id) //
.add("url", url) //
.add("allProject", allProject) //
.add("projectNames", projectNames).add("viewNames", viewNames); //
return toString.toString();
}
public List<SoftwareProjectId> getProjectIds() {
ArrayList<SoftwareProjectId> softwareProjectIds = new ArrayList<SoftwareProjectId>();
for (String projectIdSerialized : projectNames) {
softwareProjectIds.add(new SoftwareProjectId(projectIdSerialized));
}
return softwareProjectIds;
}
public void setProjectIds(List<SoftwareProjectId> projectIds) {
ArrayList<String> res = new ArrayList<String>();
for (SoftwareProjectId softwareProjectId : projectIds) {
res.add(softwareProjectId.getProjectId());
}
projectNames = res;
}
// ///////////////////////////////////////////////////////////
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public URL getUrl() {
try {
return new URL(url);
} catch (MalformedURLException e) {
throw new RuntimeException("software access url is malformed" + this, e);
}
}
public void setUrl(URL url) {
this.url = url.toString();
}
public boolean isAllProject() {
return allProject;
}
public void setAllProject(boolean allProject) {
this.allProject = allProject;
}
public List<String> getViewNames() {
return viewNames;
}
public void setViewNames(List<String> viewNames) {
this.viewNames = viewNames;
}
@JsonIgnore
public BasicCapability getConnection() {
return connection;
}
@JsonIgnore
public void setConnection(BasicCapability connection) {
this.connection = connection;
}
public Integer getProjectFinderDelaySecond() {
return projectFinderDelaySecond;
}
public void setProjectFinderDelaySecond(Integer projectFinderDelaySecond) {
this.projectFinderDelaySecond = projectFinderDelaySecond;
}
@JsonIgnore
public ScheduledFuture<Object> getProjectFinderTask() {
return projectFinderTask;
}
@JsonIgnore
public void setProjectFinderTask(ScheduledFuture<Object> projectFinderTask) {
this.projectFinderTask = projectFinderTask;
}
public void setProjectStatusDelaySecond(Integer projectStatusDelaySecond) {
this.projectStatusDelaySecond = projectStatusDelaySecond;
}
public Integer getProjectStatusDelaySecond() {
return projectStatusDelaySecond;
}
public void setProperties(Map<String, String> properties) {
this.properties = properties;
}
public Map<String, String> getProperties() {
return properties;
}
public List<String> getProjectNames() {
return projectNames;
}
public void setProjectNames(List<String> projectNames) {
this.projectNames = projectNames;
}
public void setLogin(String login) {
this.login = login;
}
public String getLogin() {
return login;
}
public void setPassword(String password) {
this.password = password;
}
public String getPassword() {
return password;
}
}