/*
*
* * Copyright (c) 2016. David Sowerby
* *
* * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* * the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
* *
* * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* * specific language governing permissions and limitations under the License.
*
*/
package uk.q3c.krail.core.sysadmin;
import com.google.inject.Inject;
import com.vaadin.ui.Button;
import com.vaadin.ui.Label;
import com.vaadin.ui.TextArea;
import com.vaadin.ui.VerticalLayout;
import net.engio.mbassy.listener.Handler;
import net.engio.mbassy.listener.Listener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import uk.q3c.krail.core.eventbus.SessionBus;
import uk.q3c.krail.core.eventbus.SubscribeTo;
import uk.q3c.krail.core.i18n.*;
import uk.q3c.krail.core.user.notify.UserNotifier;
import uk.q3c.krail.core.view.Grid3x3ViewBase;
import uk.q3c.krail.core.view.component.ViewChangeBusMessage;
import uk.q3c.krail.util.Experimental;
/**
* Enables the export of I18NKeys to a database - or at least it will one day
* Created by David Sowerby on 13/07/15.
*/
@Experimental
@Listener
@SubscribeTo(SessionBus.class)
public class I18NView extends Grid3x3ViewBase {
private static Logger log = LoggerFactory.getLogger(I18NView.class);
@Caption(caption = LabelKey.Export, description = DescriptionKey.Start_the_export_for_the_chosen_Locales)
private Button exportButton;
@Caption(caption = LabelKey.Progress, description = DescriptionKey.Export_progress)
private Label exportStatus;
private Label instructions1;
private Label instructions2;
@Caption(caption = LabelKey.Locales, description = DescriptionKey.List_of_Locales_to_export)
private TextArea localeList;
private Translate translate;
private UserNotifier userNotifier;
@Inject
protected I18NView(UserNotifier userNotifier, Translate translate) {
super(translate);
this.userNotifier = userNotifier;
this.translate = translate;
}
public Button getExportButton() {
return exportButton;
}
public TextArea getLocaleList() {
return localeList;
}
public Label getInstructions1() {
return instructions1;
}
public Label getInstructions2() {
return instructions2;
}
/**
* {@inheritDoc}
*/
@Override
protected void doBuild(ViewChangeBusMessage busMessage) {
super.doBuild(busMessage);
instructions1 = new Label();
instructions2 = new Label();
localeList = new TextArea();
exportButton = new Button();
exportButton.addClickListener(event -> export());
exportStatus = new Label();
VerticalLayout layout1 = new VerticalLayout(exportButton, exportStatus);
setTopLeft(new VerticalLayout(instructions1, instructions2, localeList));
setMiddleLeft(layout1);
localeChanged(null);
}
protected void export() {
userNotifier.notifyInformation(LabelKey.This_feature_has_not_been_implemented);
// exportStatus.setValue("");
// Optional<DatabaseBundleWriter> writerOpt = findWriter();
// Set<Locale> locales = retrieveLocales();
// if (locales.isEmpty()) {
// userNotifier.notifyInformation(MessageKey.There_are_no_Locales_to_process);
// return;
// }
// if (writerOpt.isPresent()) {
// try {
// patternUtility.writeExclusive(locales, writerOpt.get());
// exportStatus.setValue(translate.from(MessageKey.Keys_exported, writerOpt.get()
// .count(), locales.size()));
// userNotifier.notifyInformation(LabelKey.Export_complete);
// } catch (Exception e) {
// log.info("Export I18NKeys failed due to exception", e);
// userNotifier.notifyError(MessageKey.I18NKey_export_failed, e.getMessage());
// }
// }
}
@Handler
public void localeChanged(LocaleChangeBusMessage busMessage) {
instructions1.setValue(translate.from(MessageKey.Setup_I18NKey_export, LabelKey.Export));
instructions2.setValue('\n' + translate.from(MessageKey.All_Keys_exported));
}
// private Optional<DatabaseBundleWriter> findWriter() {
// exportStatus.setValue(translate.from(LabelKey.Looking_for_Database_Writer));
// Reflections reflections = new Reflections();
// final Set<Class<? extends DatabaseBundleWriter>> writers = reflections.getSubTypesOf(DatabaseBundleWriter.class);
// writers.remove(DatabaseBundleWriterBase.class);
// if (writers.size() == 1) {
// return Optional.of(injector.getInstance(writers.iterator()
// .next()));
// }
// if (writers.size() == 0) {
// userNotifier.notifyWarning(MessageKey.Needs_at_least_one_database_writer);
// return Optional.empty();
// }
// userNotifier.notifyWarning(MessageKey.Currently_limited_to_supporting_one_database_writer);
// return Optional.empty();
// }
// @Nonnull
// protected Set<Locale> retrieveLocales() {
// exportStatus.setValue(translate.from(LabelKey.Retrieving_Locales));
// String userInput = localeList.getValue();
// List<String> localeTags = Splitter.on("\n")
// .trimResults()
// .omitEmptyStrings()
// .splitToList(userInput);
// Set<Locale> locales = new HashSet<>();
// localeTags.forEach(tag -> {
// try {
// Locale locale = new Locale.Builder().setLanguageTag(tag)
// .build();
// locales.add(locale);
// } catch (IllformedLocaleException e) {
// userNotifier.notifyWarning(MessageKey.Invalid_Locale_Langugage_Tag, tag);
// }
// });
// return locales;
// }
}