PublisherVersionView.java 11.7 KB
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;
    }
}