package org.legrog.web.publisher; import org.legrog.entities.*; import org.legrog.web.xyz.SharedService; import org.ocpsoft.rewrite.annotation.Join; import org.ocpsoft.rewrite.annotation.Parameter; import org.ocpsoft.rewrite.annotation.RequestAction; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.annotation.PostConstruct; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.inject.Named; import java.io.Serializable; import java.sql.Timestamp; import java.util.List; /** * publisherVersion.xhtml's view * Handles create, read and "update" of publisher versions. * Create creates the Publisher and its first PublisherVersion * Update creates a new PublisherVersion linked to the Publisher */ @Named @RequestScoped @Join(path = "/PublisherVersion/{stringId}", to = "/publisher/publisherVersion.jsf") public class PublisherVersionView implements Serializable { @Parameter String stringId; transient Logger logger = LoggerFactory.getLogger(getClass()); transient PublisherService publisherService; transient SharedService sharedService; private boolean editMode; private boolean newPublisher; private int publisherVersionId; private String publisherName; private String streetAddress; private String postalCode; private String postOfficeBoxNumber; private String addressRegion; private String addressLocality; private transient Country publisherAddressCountry; private String telephone; private String email; private String uRL; private String publisherHistory; private transient Account publisherVersionAuthor; private Timestamp publisherVersionDatetime; private transient Publisher publisher; private transient List<Country> availableCountries; private transient List<PublisherAction> publisherActions; /** * Uses PublisherService to get its data and SharedService to get countries * * @param publisherService injected PublisherService * @param sharedService injected SharedService */ @Inject public PublisherVersionView(PublisherService publisherService, SharedService sharedService) { this.publisherService = publisherService; this.sharedService = sharedService; } PublisherVersionView() { //no args constructor to make it proxyable } /** * Loads countries and adapts to availability of parameter */ @PostConstruct @RequestAction public void init() { availableCountries = sharedService.getAllCountries(); PublisherVersion publisherVersion = null; logger.debug("stringId = {}", this.stringId); if (stringId != null) { try { publisherVersionId = Integer.parseInt(stringId); } catch (NumberFormatException ne) { publisherVersionId = 0; } } else { publisherVersionId = 0; } if (publisherVersionId != 0) { publisherVersion = publisherService.getPublisherVersion(publisherVersionId); publisherActions = publisherService.getAllPublisherVersionActions(publisherVersion); } if (publisherVersion != null) { logger.debug("Found a publisher version : {}", publisherVersion.toString()); publisherName = publisherVersion.getPublisherName(); streetAddress = publisherVersion.getPublisherStreetAddress(); postalCode = publisherVersion.getPublisherPostalCode(); postOfficeBoxNumber = publisherVersion.getPublisherPostOfficeBoxNumber(); addressRegion = publisherVersion.getPublisherAddressRegion(); addressLocality = publisherVersion.getPublisherAddressLocality(); publisherAddressCountry = publisherVersion.getPublisherAddressCountry(); telephone = publisherVersion.getPublisherTelephone(); email = publisherVersion.getPublisherEmail(); uRL = publisherVersion.getPublisherURL(); publisherHistory = publisherVersion.getPublisherHistory(); publisher = publisherVersion.getPublisher(); getImmutableValues(); logger.debug("Found a publisher : {}", publisher.toString()); newPublisher = false; } else { logger.debug("No publisher."); editMode = true; newPublisher = true; } } /** * Activates edition mode */ public void edit() { editMode = true; } /** * Cancels current edition */ public void cancel() { if (!newPublisher) { init(); editMode = false; } else { publisherName = null; streetAddress = null; postalCode = null; postOfficeBoxNumber = null; addressRegion = null; addressLocality = null; publisherAddressCountry = null; telephone = null; email = null; uRL = null; publisherHistory = null; // I don't think the following line is useful publisher = null; editMode = true; } } /** * Saves current version */ public void save() { logger.debug("save()"); if (newPublisher) { logger.debug("->add"); add(); } else { logger.debug("->update"); update(); } } private PublisherVersion getNewPublisherVersion() { PublisherVersion publisherVersion = new PublisherVersion(); publisherVersion.setPublisherAddressCountry(publisherAddressCountry); publisherVersion.setPublisherAddressLocality(addressLocality); publisherVersion.setPublisherAddressRegion(addressRegion); publisherVersion.setPublisherEmail(email); publisherVersion.setPublisherHistory(publisherHistory); publisherVersion.setPublisherName(publisherName); publisherVersion.setPublisherPostalCode(postalCode); publisherVersion.setPublisherPostOfficeBoxNumber(postOfficeBoxNumber); publisherVersion.setPublisherStreetAddress(streetAddress); publisherVersion.setPublisherTelephone(telephone); publisherVersion.setPublisherURL(uRL); return publisherVersion; } private void getImmutableValues() { PublisherVersion publisherVersion; publisherVersion = publisherService.getPublisherVersion(publisherVersionId); if (publisherVersion == null) { throw new IllegalStateException("Publisher version not found"); } publisherVersionAuthor = publisherVersion.getPublisherVersionAuthor(); publisherVersionDatetime = publisherVersion.getPublisherVersionDatetime(); } void add() { PublisherVersion publisherVersion = getNewPublisherVersion(); publisherVersion = publisherService.addNewPublisher(publisherVersion); newPublisher = false; publisherVersionId = publisherVersion.getPublisherVersionId(); publisher = publisherVersion.getPublisher(); getImmutableValues(); editMode = false; } void update() { logger.trace("debut update, attributs locaux, publisherAddressCountry = {} addressLocality = {} addressRegion = {} email = {} publisherHistory = {} publisherName = {} postalCode = {} postOfficeBoxNumber = {} streetAddress = {} telephone {} uRL {}", publisherAddressCountry, addressLocality, addressRegion, email, publisherHistory, publisherName, postalCode, postOfficeBoxNumber, streetAddress, telephone, uRL); PublisherVersion publisherVersion = getNewPublisherVersion(); logger.trace("milieu update, avant enregistrement, publisherVersion = {}", publisherVersion); publisherVersion = publisherService.addVersionToPublisher(publisher, publisherVersion); publisherVersionId = publisherVersion.getPublisherVersionId(); getImmutableValues(); editMode = false; logger.trace("fin update, après récupération, publisherVersion = {}", publisherVersion); } // Accessors public int getPublisherVersionId() { return publisherVersionId; } public void setPublisherVersionId(int publisherVersionId) { this.publisherVersionId = publisherVersionId; } public String getPublisherName() { return publisherName; } public void setPublisherName(String publisherName) { this.publisherName = publisherName; } public String getStreetAddress() { return streetAddress; } public void setStreetAddress(String streetAddress) { this.streetAddress = streetAddress; } public String getPostalCode() { return postalCode; } public void setPostalCode(String postalCode) { this.postalCode = postalCode; } public String getPostOfficeBoxNumber() { return postOfficeBoxNumber; } public void setPostOfficeBoxNumber(String postOfficeBoxNumber) { this.postOfficeBoxNumber = postOfficeBoxNumber; } public String getAddressRegion() { return addressRegion; } public void setAddressRegion(String addressRegion) { this.addressRegion = addressRegion; } public String getAddressLocality() { return addressLocality; } public void setAddressLocality(String addressLocality) { this.addressLocality = addressLocality; } public Country getPublisherAddressCountry() { return publisherAddressCountry; } public void setPublisherAddressCountry(Country publisherAddressCountry) { this.publisherAddressCountry = publisherAddressCountry; } public String getTelephone() { return telephone; } public void setTelephone(String telephone) { this.telephone = telephone; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getuRL() { return uRL; } public void setuRL(String uRL) { this.uRL = uRL; } public String getPublisherHistory() { return publisherHistory; } public void setPublisherHistory(String publisherHistory) { this.publisherHistory = publisherHistory; } public Account getPublisherVersionAuthor() { return publisherVersionAuthor; } public void setPublisherVersionAuthor(Account publisherVersionAuthor) { this.publisherVersionAuthor = publisherVersionAuthor; } public Timestamp getPublisherVersionDatetime() { return publisherVersionDatetime; } public void setPublisherVersionDatetime(Timestamp publisherVersionDatetime) { this.publisherVersionDatetime = publisherVersionDatetime; } public List<Country> getAvailableCountries() { return availableCountries; } public void setAvailableCountries(List<Country> availableCountries) { this.availableCountries = availableCountries; } public boolean isNewPublisher() { return newPublisher; } public boolean isEditMode() { return editMode; } public void setEditMode(boolean editMode) { this.editMode = editMode; } public void setNewPublisher(boolean newPublisher) { this.newPublisher = newPublisher; } public Publisher getPublisher() { return publisher; } public void setPublisher(Publisher publisher) { this.publisher = publisher; } public List<PublisherAction> getPublisherActions() { return publisherActions; } public String getStringId() { return stringId; } public void setStringId(String stringId) { this.stringId = stringId; } }