All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.vectorpublish.desktop.vp.SetArticleButton Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (c) 2016, Peter Rader. All rights reserved.
 *  ___ ___               __                 ______         __     __  __         __
 * |   |   |.-----..----.|  |_ .-----..----.|   __ \.--.--.|  |--.|  ||__|.-----.|  |--.
 * |   |   ||  -__||  __||   _||  _  ||   _||    __/|  |  ||  _  ||  ||  ||__ --||     |
 *  \_____/ |_____||____||____||_____||__|  |___|   |_____||_____||__||__||_____||__|__|
 *
 * http://www.gnu.org/licenses/gpl-3.0.html
 */
package net.vectorpublish.desktop.vp;

import java.awt.event.ActionEvent;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.concurrent.ExecutionException;

import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.inject.Named;

import net.vectorpublish.desktop.vp.ah.SetArticleData;
import net.vectorpublish.desktop.vp.api.history.Redo;
import net.vectorpublish.desktop.vp.api.layer.LayerSelectionListener;
import net.vectorpublish.desktop.vp.api.ui.Dialog;
import net.vectorpublish.desktop.vp.api.ui.ToolBar;
import net.vectorpublish.desktop.vp.api.ui.VPAbstractAction;
import net.vectorpublish.desktop.vp.api.ui.Warn;
import net.vectorpublish.desktop.vp.api.vpd.VectorPublishNode;
import net.vectorpublish.desktop.vp.article.ArticleTexts;
import net.vectorpublish.desktop.vp.article.TextReader;
import net.vectorpublish.desktop.vp.split.SplitNode;
import net.vectorpublish.desktop.vp.ui.ImageKey;
import net.vectorpublish.desktop.vp.utils.SetUtils;

@Named
public class SetArticleButton extends VPAbstractAction implements LayerSelectionListener {

	public SetArticleButton() {
		super(ArticleTexts.SET_ARTICLE, ArticleTexts.SET_ARTICLE_TOOLTIP, true);
	}

	@Inject
	private final ToolBar tb = null;

	@Inject
	private final Dialog dlg = null;

	private SplitNode splitter;

	@Inject
	private final History hist = null;

	@Inject
	private final Redo redo = null;

	@Inject
	private final Warn warn = null;

	@Inject
	private final TextReader[] readers = null;

	@Override
	public void actionPerformed(ActionEvent e) {
		new Thread(new Runnable() {

			@Override
			public void run() {
				List paragraphs = null;
				while (paragraphs == null) {
					File file = dlg.showOpenFile("", "File containing text");
					for (TextReader textReader : readers) {
						try {
							paragraphs = textReader.read(file);
						} catch (IOException exception) {
							warn.addWarning(exception.getMessage());
						}
						if (paragraphs != null) {
							break;
						}
					}
					if (paragraphs == null) {
						Boolean retry;
						try {
							retry = dlg.confirm(ArticleTexts.NS, "No text available", "This is not a vaild text-file.",
									"Change", "Close").get();
						} catch (InterruptedException | ExecutionException e1) {
							return;
						}
						if (retry != null && !retry) {
							return;
						}
					}
				}
				SetArticleData data = new SetArticleData(SetUtils.nodeToImmutableIndex(splitter), paragraphs);
				SetArticleStep step = new SetArticleStep(hist, hist.getCurrentDocument().getLastExecutedHistoryStep(),
						data);
				redo.actionPerformed(e);
			}
		}).start();

	}

	@PostConstruct
	public void setup() {
		setIcons(ArticleTexts.NS, ImageKey.get("article.add"));
		tb.add(this);
	}

	@Override
	public void notify(Set selection) {
		if (selection.size() != 1) {
			setEnabled(false);
		} else {
			VectorPublishNode selected = selection.iterator().next();
			if (selected instanceof SplitNode) {
				SplitNode splitNode = (SplitNode) selected;
				if (splitNode.getChildCount() < 2) {
					splitter = splitNode;
					setEnabled(true);
				}
			} else {
				setEnabled(false);
			}
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy