/*
* Copyright (c) 2014 Dennis Fischer.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Public License v3.0+
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/gpl.html
*
* Contributors: Dennis Fischer
*/
package de.chaosfisch.uploader.gui.controller;
import com.cathive.fx.guice.FXMLController;
import de.chaosfisch.google.youtube.upload.Upload;
import de.chaosfisch.google.youtube.upload.metadata.Monetization;
import de.chaosfisch.google.youtube.upload.metadata.permissions.Asset;
import de.chaosfisch.google.youtube.upload.metadata.permissions.ClaimOption;
import de.chaosfisch.google.youtube.upload.metadata.permissions.ClaimType;
import de.chaosfisch.google.youtube.upload.metadata.permissions.Syndication;
import de.chaosfisch.uploader.template.Template;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.Node;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import java.net.URL;
import java.util.ResourceBundle;
@FXMLController
public class UploadPartnerController {
@FXML
private ResourceBundle resources;
@FXML
private URL location;
@FXML
private GridPane gridPane;
@FXML
private ChoiceBox<Asset> monetizeAsset;
@FXML
private CheckBox monetizeClaim;
@FXML
private ChoiceBox<ClaimOption> monetizeClaimOption;
@FXML
private ChoiceBox<ClaimType> monetizeClaimType;
@FXML
private TextField monetizeDescription;
@FXML
private TextField monetizeEIDR;
@FXML
private TextField monetizeEpisodeNb;
@FXML
private TextField monetizeID;
@FXML
private TextField monetizeISAN;
@FXML
private CheckBox monetizeInstream;
@FXML
private CheckBox monetizeInstreamDefaults;
@FXML
private TextField monetizeNotes;
@FXML
private CheckBox monetizeOverlay;
@FXML
private CheckBox monetizeProduct;
@FXML
private TextField monetizeSeasonNb;
@FXML
private ChoiceBox<Syndication> monetizeSyndication;
@FXML
private TextField monetizeTMSID;
@FXML
private TextField monetizeTitle;
@FXML
private TextField monetizeTitleEpisode;
@FXML
private CheckBox monetizeTrueview;
private final ObservableList<ClaimOption> claimOptionsList = FXCollections.observableArrayList();
private final ObservableList<ClaimType> claimTypesList = FXCollections.observableArrayList();
private final ObservableList<Asset> assetList = FXCollections.observableArrayList();
private final ObservableList<Syndication> syndicationList = FXCollections.observableArrayList();
@FXML
void initialize() {
assert null != gridPane : "fx:id=\"anchorPane\" was not injected: check your FXML file 'UploadPartner.fxml'.";
assert null != monetizeAsset : "fx:id=\"monetizeAsset\" was not injected: check your FXML file 'UploadPartner.fxml'.";
assert null != monetizeClaim : "fx:id=\"monetizeClaim\" was not injected: check your FXML file 'UploadPartner.fxml'.";
assert null != monetizeClaimOption : "fx:id=\"monetizeClaimOption\" was not injected: check your FXML file 'UploadPartner.fxml'.";
assert null != monetizeClaimType : "fx:id=\"monetizeClaimType\" was not injected: check your FXML file 'UploadPartner.fxml'.";
assert null != monetizeDescription : "fx:id=\"monetizeDescription\" was not injected: check your FXML file 'UploadPartner.fxml'.";
assert null != monetizeEIDR : "fx:id=\"monetizeEIDR\" was not injected: check your FXML file 'UploadPartner.fxml'.";
assert null != monetizeEpisodeNb : "fx:id=\"monetizeEpisodeNb\" was not injected: check your FXML file 'UploadPartner.fxml'.";
assert null != monetizeID : "fx:id=\"monetizeID\" was not injected: check your FXML file 'UploadPartner.fxml'.";
assert null != monetizeISAN : "fx:id=\"monetizeISAN\" was not injected: check your FXML file 'UploadPartner.fxml'.";
assert null != monetizeInstream : "fx:id=\"monetizeInstream\" was not injected: check your FXML file 'UploadPartner.fxml'.";
assert null != monetizeInstreamDefaults : "fx:id=\"monetizeInstreamDefaults\" was not injected: check your FXML file 'UploadPartner.fxml'.";
assert null != monetizeNotes : "fx:id=\"monetizeNotes\" was not injected: check your FXML file 'UploadPartner.fxml'.";
assert null != monetizeOverlay : "fx:id=\"monetizeOverlay\" was not injected: check your FXML file 'UploadPartner.fxml'.";
assert null != monetizeProduct : "fx:id=\"monetizeProduct\" was not injected: check your FXML file 'UploadPartner.fxml'.";
assert null != monetizeSeasonNb : "fx:id=\"monetizeSeasonNb\" was not injected: check your FXML file 'UploadPartner.fxml'.";
assert null != monetizeSyndication : "fx:id=\"monetizeSyndication\" was not injected: check your FXML file 'UploadPartner.fxml'.";
assert null != monetizeTMSID : "fx:id=\"monetizeTMSID\" was not injected: check your FXML file 'UploadPartner.fxml'.";
assert null != monetizeTitle : "fx:id=\"monetizeTitle\" was not injected: check your FXML file 'UploadPartner.fxml'.";
assert null != monetizeTitleEpisode : "fx:id=\"monetizeTitleEpisode\" was not injected: check your FXML file 'UploadPartner.fxml'.";
assert null != monetizeTrueview : "fx:id=\"monetizeTrueview\" was not injected: check your FXML file 'UploadPartner.fxml'.";
monetizeClaimOption.getSelectionModel().selectedItemProperty().addListener(new ClaimOptionChangeListener());
monetizeAsset.getSelectionModel().selectedItemProperty().addListener(new AssetChangeListener());
monetizeClaimOption.setItems(claimOptionsList);
monetizeClaimType.setItems(claimTypesList);
monetizeAsset.setItems(assetList);
monetizeSyndication.setItems(syndicationList);
claimTypesList.addAll(ClaimType.values());
claimOptionsList.addAll(ClaimOption.values());
assetList.addAll(Asset.values());
syndicationList.addAll(Syndication.values());
monetizeClaimOption.getSelectionModel().selectFirst();
monetizeSyndication.getSelectionModel().selectFirst();
monetizeAsset.getSelectionModel().selectFirst();
monetizeClaimType.getSelectionModel().selectFirst();
}
public void fromUpload(final Upload upload) {
final Monetization monetization = null == upload.getMonetization() ?
new Monetization() :
upload.getMonetization();
fromMonetization(monetization);
}
public void fromTemplate(final Template template) {
final Monetization monetization = null == template.getMonetization() ?
new Monetization() :
template.getMonetization();
fromMonetization(monetization);
}
private void fromMonetization(final Monetization monetization) {
monetizeAsset.setValue(monetization.getAsset());
monetizeClaimType.setValue(monetization.getClaimtype());
monetizeClaimOption.setValue(monetization.getClaimoption());
monetizeDescription.setText(monetization.getDescription());
monetizeEIDR.setText(monetization.getEidr());
monetizeEpisodeNb.setText(monetization.getEpisodeNb());
monetizeID.setText(monetization.getCustomId());
monetizeISAN.setText(monetization.getIsan());
monetizeNotes.setText(monetization.getNotes());
monetizeSeasonNb.setText(monetization.getSeasonNb());
monetizeSyndication.setValue(monetization.getSyndication());
monetizeTMSID.setText(monetization.getTmsid());
monetizeTitle.setText(monetization.getTitle());
monetizeTitleEpisode.setText(monetization.getTitleepisode());
monetizeClaim.setSelected(monetization.isClaim());
monetizeOverlay.setSelected(monetization.isOverlay());
monetizeTrueview.setSelected(monetization.isTrueview());
monetizeProduct.setSelected(monetization.isProduct());
monetizeInstream.setSelected(monetization.isInstream());
monetizeInstreamDefaults.setSelected(monetization.isInstreamDefaults());
}
public Upload toUpload(final Upload upload) {
final Monetization monetization = upload.getMonetization();
toMonetization(monetization);
upload.setMonetization(monetization);
return upload;
}
public Template toTemplate(final Template template) {
final Monetization monetization = template.getMonetization();
toMonetization(monetization);
template.setMonetization(monetization);
return template;
}
private void toMonetization(final Monetization monetization) {
monetization.setAsset(monetizeAsset.getValue());
monetization.setClaim(monetizeClaim.isSelected());
monetization.setClaimoption(monetizeClaimOption.getValue());
monetization.setClaimtype(monetizeClaimType.getValue());
monetization.setDescription(monetizeDescription.getText());
monetization.setEidr(monetizeEIDR.getText());
monetization.setEpisodeNb(monetizeEpisodeNb.getText());
monetization.setCustomId(monetizeID.getText());
monetization.setIsan(monetizeISAN.getText());
monetization.setInstream(monetizeInstream.isSelected());
monetization.setInstreamDefaults(monetizeInstreamDefaults.isSelected());
monetization.setNotes(monetizeNotes.getText());
monetization.setOverlay(monetizeOverlay.isSelected());
monetization.setProduct(monetizeProduct.isSelected());
monetization.setTrueview(monetizeTrueview.isSelected());
monetization.setSeasonNb(monetizeSeasonNb.getText());
monetization.setSyndication(monetizeSyndication.getValue());
monetization.setTmsid(monetizeTMSID.getText());
monetization.setTitle(monetizeTitle.getText());
monetization.setTitleepisode(monetizeTitleEpisode.getText());
}
public Node getNode() {
return gridPane;
}
private final class ClaimOptionChangeListener implements ChangeListener<ClaimOption> {
final CheckBox[] controls = {monetizeOverlay, monetizeTrueview, monetizeProduct, monetizeInstream,
monetizeInstreamDefaults};
@Override
public void changed(final ObservableValue<? extends ClaimOption> observable, final ClaimOption oldValue, final ClaimOption newValue) {
if (null == newValue) {
return;
}
switch (newValue) {
case MONETIZE:
for (final CheckBox checkBox : controls) {
checkBox.setDisable(false);
}
break;
case BLOCK:
case TRACK:
for (final CheckBox checkBox : controls) {
checkBox.setSelected(false);
checkBox.setDisable(true);
}
break;
}
}
}
private final class AssetChangeListener implements ChangeListener<Asset> {
@Override
public void changed(final ObservableValue<? extends Asset> observable, final Asset oldValue, final Asset newValue) {
if (null == newValue) {
return;
}
switch (newValue) {
case MOVIE:
monetizeDescription.setDisable(false);
monetizeEIDR.setDisable(false);
monetizeISAN.setDisable(false);
monetizeEpisodeNb.setDisable(false);
monetizeSeasonNb.setDisable(false);
monetizeTitleEpisode.setDisable(false);
monetizeTMSID.setDisable(false);
break;
case TV:
monetizeDescription.setDisable(true);
monetizeEIDR.setDisable(false);
monetizeISAN.setDisable(false);
monetizeEpisodeNb.setDisable(false);
monetizeSeasonNb.setDisable(false);
monetizeTitleEpisode.setDisable(false);
monetizeTMSID.setDisable(false);
break;
case WEB:
monetizeDescription.setDisable(false);
monetizeEIDR.setDisable(true);
monetizeISAN.setDisable(true);
monetizeEpisodeNb.setDisable(true);
monetizeSeasonNb.setDisable(true);
monetizeTitleEpisode.setDisable(true);
monetizeTMSID.setDisable(true);
break;
}
}
}
}