package com.ciandt.techgallery.persistence.model;
import com.google.api.server.spi.config.ApiTransformer;
import com.googlecode.objectify.annotation.Entity;
import com.googlecode.objectify.annotation.Id;
import com.googlecode.objectify.annotation.Ignore;
import com.googlecode.objectify.annotation.Index;
import com.googlecode.objectify.annotation.Unindex;
import com.ciandt.techgallery.service.enums.TechnologyOrderOptionEnum;
import com.ciandt.techgallery.service.transformer.TechnologyTransformer;
import java.text.Normalizer;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
/**
* Technology entity.
*
* @author Felipe Goncalves de Castro
*
*/
@Entity
@ApiTransformer(TechnologyTransformer.class)
public class Technology extends BaseEntity<String> {
/*
* Constants --------------------------------------------
*/
public static final String ID = "id";
public static final String NAME = "name";
public static final String SHORT_DESCRIPTION = "shortDescription";
public static final String DESCRIPTION = "description";
public static final String WEBSITE = "website";
public static final String AUTHOR = "author";
public static final String IMAGE = "image";
public static final String RECOMMENDATION = "recommendation";
public static final String RECOMMENDATION_JUSTIFICATION = "recommendationJustification";
public static final String POSITIVE_RECOMMENDATIONS_COUNTER = "positiveRecommendationsCounter";
public static final String NEGATIVE_RECOMMENDATIONS_COUNTER = "negativeRecommendationsCounter";
public static final String COMMENTARIES_COUNTER = "commentariesCounter";
public static final String ENDORSERS_COUNTER = "endorsersCounter";
public static final String LAST_ACTIVITY = "lastActivity";
public static final String UPDATE_USER = "updateUser";
public static final String ACTIVE = "active";
/*
* Attributes --------------------------------------------
*/
@Id
private String id;
@Index
private String name;
@Unindex
private String shortDescription;
@Unindex
private String description;
@Unindex
private String website;
@Unindex
private String idBoard;
@Unindex
private String author;
@Unindex
private String image;
/** company recommendation info. */
@Unindex
private String recommendation;
@Unindex
private String recommendationJustification;
@Index
private Integer positiveRecommendationsCounter;
@Index
private Integer negativeRecommendationsCounter;
@Index
private Integer commentariesCounter;
@Index
private Integer endorsersCounter;
@Unindex
private Date creationDate;
@Ignore
private boolean followedByUser;
@Unindex
private Date lastActivity;
@Unindex
private String lastActivityUser;
@Index
private Boolean active;
@Ignore
private String imageContent;
/*
* Getter's and Setter's --------------------------------------------
*/
@Override
public String getId() {
return id;
}
@Override
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public String getImageContent() {
return imageContent;
}
public void setImageContent(String imageContent) {
this.imageContent = imageContent;
}
public void setName(String name) {
this.name = name;
}
public String getShortDescription() {
return shortDescription;
}
public void setShortDescription(String shortDescription) {
this.shortDescription = shortDescription;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getWebsite() {
return website;
}
public void setWebsite(String website) {
if (website != null && !website.contains("http")) {
this.website = "http://" + website;
} else {
this.website = website;
}
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public Boolean getActive() {
return active;
}
public void setActive(Boolean active) {
this.active = active;
}
public String getRecommendation() {
return recommendation;
}
public void setRecommendation(String recommendation) {
this.recommendation = recommendation;
}
public String getRecommendationJustification() {
return recommendationJustification;
}
public void setRecommendationJustification(String recommendationJustification) {
this.recommendationJustification = recommendationJustification;
}
public Integer getPositiveRecommendationsCounter() {
return positiveRecommendationsCounter;
}
public void setPositiveRecommendationsCounter(Integer positiveRecommendationsCounter) {
this.positiveRecommendationsCounter = positiveRecommendationsCounter;
}
public Integer getNegativeRecommendationsCounter() {
return negativeRecommendationsCounter;
}
public void setNegativeRecommendationsCounter(Integer negativeRecommendationsCounter) {
this.negativeRecommendationsCounter = negativeRecommendationsCounter;
}
public Integer getCommentariesCounter() {
return commentariesCounter;
}
public void setCommentariesCounter(Integer commentariesCounter) {
this.commentariesCounter = commentariesCounter;
}
public Integer getEndorsersCounter() {
return endorsersCounter;
}
public void setEndorsersCounter(Integer endorsersCounter) {
this.endorsersCounter = endorsersCounter;
}
public Date getCreationDate() {
return creationDate;
}
public void setCreationDate(Date creationDate) {
this.creationDate = creationDate;
}
public boolean isFollowedByUser() {
return followedByUser;
}
public void setFollowedByUser(boolean followedByUser) {
this.followedByUser = followedByUser;
}
public Date getLastActivity() {
return lastActivity;
}
public void setLastActivity(Date lastActivity) {
this.lastActivity = lastActivity;
}
public String getLastActivityUser() {
return lastActivityUser;
}
public void setLastActivityUser(String lastActivityUser) {
this.lastActivityUser = lastActivityUser;
}
public String getIdBoard() {
return idBoard;
}
public void setIdBoard(String idBoard) {
this.idBoard = idBoard;
}
/*
* Methods --------------------------------------------
*/
/**
* Add 1 to the positive recomndations counter.
*/
public void addPositiveRecommendationsCounter() {
positiveRecommendationsCounter++;
}
/**
* Remove 1 to the positive recomndations counter.
*/
public void removePositiveRecommendationsCounter() {
if (positiveRecommendationsCounter > 0) {
positiveRecommendationsCounter--;
} else {
positiveRecommendationsCounter = 0;
}
}
/**
* Add 1 to the negative recomndations counter.
*/
public void addNegativeRecommendationsCounter() {
negativeRecommendationsCounter++;
}
/**
* Remove 1 to the negative recomndations counter.
*/
public void removeNegativeRecommendationsCounter() {
if (negativeRecommendationsCounter > 0) {
negativeRecommendationsCounter--;
} else {
negativeRecommendationsCounter = 0;
}
}
/**
* Add 1 to the commentary counter.
*/
public void addCommentariesCounter() {
commentariesCounter++;
}
/**
* Remove 1 to the commentary counter.
*/
public void removeCommentariesCounter() {
if (commentariesCounter > 0) {
commentariesCounter--;
} else {
commentariesCounter = 0;
}
}
/**
* Initialize the technology counters.
*/
public void initCounters() {
commentariesCounter = 0;
endorsersCounter = 0;
negativeRecommendationsCounter = 0;
positiveRecommendationsCounter = 0;
}
/**
* Sort the technology list by Last Activity Date.
*
* @param techEntities List of technologies.
*/
public static void sortTechnologiesDefault(List<Technology> techEntities) {
Collections.sort(techEntities, new Comparator<Technology>() {
@Override
public int compare(Technology counter1, Technology counter2) {
return counter2.getLastActivity().compareTo(counter1.getLastActivity());
}
});
}
/**
* Sort the Technology list according to the given enum value.
*
* @param techList List of technologies.
* @param orderBy Enum value.
* @return sorted list.
*/
public static List<Technology> sortTechnologies(List<Technology> techList,
TechnologyOrderOptionEnum orderBy) {
orderBy.sort(techList);
return techList;
}
/**
* Method that gets the name of the technology and creates the id.
*
* @author <a href="mailto:joaom@ciandt.com"> João Felipe de Medeiros
* Moreira </a>
* @since 13/10/2015
*
* @param name
* to format.
*
* @return the id formatted.
*/
public String convertNameToId(String name) {
name = Normalizer.normalize(name, Normalizer.Form.NFD);
name = name.replaceAll("[^\\p{ASCII}]", "");
return name.toLowerCase()
.replaceAll(" ", "_")
.replaceAll("#", "_")
.replaceAll("\\/", "_")
.replaceAll("\\.", "");
}
}