rest api for label and hibernate mapping

This commit is contained in:
Ezequiel Bergamaschi
2014-01-25 23:21:17 -03:00
committed by Ezequiel Bergamaschi
parent 504e3e18e6
commit 1b480b566a
13 changed files with 305 additions and 0 deletions

View File

@@ -0,0 +1,10 @@
package com.wisemapping.dao;
import com.wisemapping.model.Label;
public interface LabelManager {
void addLabel(Label label);
void saveLabel(Label label);
}

View File

@@ -0,0 +1,19 @@
package com.wisemapping.dao;
import com.wisemapping.model.Label;
import org.jetbrains.annotations.NotNull;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public class LabelManagerImpl extends HibernateDaoSupport
implements LabelManager {
@Override
public void addLabel(Label label) {
saveLabel(label);
}
@Override
public void saveLabel(@NotNull Label label) {
getSession().save(label);
}
}

View File

@@ -0,0 +1,49 @@
package com.wisemapping.model;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class Label {
//~ Instance fields ......................................................................................
private int id;
@NotNull private String title;
@NotNull private User creator;
@Nullable private Label parent;
public void setParent(@Nullable Label parent) {
this.parent = parent;
}
@Nullable
public Label getParent() {
return parent;
}
public void setCreator(@NotNull User creator) {
this.creator = creator;
}
@NotNull
public User getCreator() {
return creator;
}
@NotNull
public String getTitle() {
return title;
}
public void setTitle(@NotNull String title) {
this.title = title;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}

View File

@@ -0,0 +1,60 @@
package com.wisemapping.rest;
import com.wisemapping.exceptions.WiseMappingException;
import com.wisemapping.model.Label;
import com.wisemapping.model.User;
import com.wisemapping.rest.model.RestLabel;
import com.wisemapping.security.Utils;
import com.wisemapping.service.LabelService;
import com.wisemapping.validator.LabelValidator;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BeanPropertyBindingResult;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseStatus;
import javax.servlet.http.HttpServletResponse;
@Controller
public class LabelController extends BaseController {
@Qualifier("labelService")
@Autowired
private LabelService labelService;
@RequestMapping(method = RequestMethod.POST, value = "/labels", consumes = {"application/json"})
@ResponseStatus(value = HttpStatus.CREATED)
public void createLabel(@RequestBody RestLabel restLabel, @NotNull HttpServletResponse response, @RequestParam(required = false) String title) throws WiseMappingException {
// Overwrite title if it was specified by parameter.
if (title != null && !title.isEmpty()) {
restLabel.setTitle(title);
}
final Label label = restLabel.getDelegated();
// Validate ...
final BindingResult result = new BeanPropertyBindingResult(restLabel, "");
new LabelValidator().validate(label, result);
if (result.hasErrors()) {
throw new ValidationException(result);
}
// Add new label ...
final User user = Utils.getUser();
assert user != null;
labelService.addLabel(label, user);
// Return the new created map ...
response.setHeader("ResourceId", Integer.toString(label.getId()));
}
}

View File

@@ -0,0 +1,59 @@
package com.wisemapping.rest.model;
import com.wisemapping.model.Label;
import org.codehaus.jackson.annotate.JsonAutoDetect;
import org.codehaus.jackson.annotate.JsonIgnore;
import org.jetbrains.annotations.NotNull;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import static org.codehaus.jackson.annotate.JsonAutoDetect.Visibility.NONE;
import static org.codehaus.jackson.annotate.JsonAutoDetect.Visibility.PUBLIC_ONLY;
@XmlRootElement(name = "label")
@XmlAccessorType(XmlAccessType.PROPERTY)
@JsonAutoDetect(
fieldVisibility = NONE,
setterVisibility = PUBLIC_ONLY,
isGetterVisibility = NONE,
getterVisibility = PUBLIC_ONLY
)
public class RestLabel {
@JsonIgnore
private Label label;
public RestLabel() {
this(new Label());
}
public RestLabel(@NotNull final Label label) {
this.label = label;
}
public String getTitle() {
return this.label.getTitle();
}
public int getId() {
return label.getId();
}
public String getCreator() {
return this.label.getCreator().getEmail();
}
public void setId(int id) {
label.setId(id);
}
public void setTitle(String title) {
label.setTitle(title);
}
@JsonIgnore
public Label getDelegated() {
return label;
}
}

View File

@@ -0,0 +1,12 @@
package com.wisemapping.service;
import com.wisemapping.exceptions.WiseMappingException;
import com.wisemapping.model.Label;
import com.wisemapping.model.User;
import org.jetbrains.annotations.NotNull;
public interface LabelService {
void addLabel(@NotNull final Label label, @NotNull final User user) throws WiseMappingException;
}

View File

@@ -0,0 +1,24 @@
package com.wisemapping.service;
import com.wisemapping.dao.LabelManager;
import com.wisemapping.exceptions.WiseMappingException;
import com.wisemapping.model.Label;
import com.wisemapping.model.User;
import org.jetbrains.annotations.NotNull;
public class LabelServiceImpl implements LabelService {
private LabelManager labelManager;
public void setLabelManager(LabelManager labelManager) {
this.labelManager = labelManager;
}
@Override
public void addLabel(@NotNull final Label label, @NotNull final User user) throws WiseMappingException {
label.setCreator(user);
labelManager.addLabel(label);
}
}

View File

@@ -0,0 +1,32 @@
package com.wisemapping.validator;
import com.wisemapping.model.Label;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;
public class LabelValidator implements Validator {
@Override
public boolean supports(Class<?> clazz) {
return clazz.equals(Label.class);
}
@Override
public void validate(@Nullable final Object target, @NotNull final Errors errors) {
final Label label = (Label) target;
if (label == null) {
errors.rejectValue("map", "error.not-specified", null, "Value required.");
} else {
validateLabel(label, errors);
}
}
private void validateLabel(@NotNull final Label label, @NotNull final Errors errors) {
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "title", Messages.FIELD_REQUIRED);
String title = label.getTitle();
//todo hacer otras validaciones como si supera el maximo o el label existe
}
}