package kornell.gui.client.presentation.admin.courseversion.courseversion.wizard; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import com.github.gwtbootstrap.client.ui.Button; import com.github.gwtbootstrap.client.ui.Icon; import com.github.gwtbootstrap.client.ui.constants.AlertType; import com.google.gwt.core.client.GWT; import kornell.gui.client.presentation.admin.courseversion.courseversion.autobean.wizard.Wizard; import kornell.gui.client.presentation.admin.courseversion.courseversion.autobean.wizard.WizardElement; import kornell.gui.client.presentation.admin.courseversion.courseversion.autobean.wizard.WizardFactory; import kornell.gui.client.presentation.admin.courseversion.courseversion.autobean.wizard.WizardSlide; import kornell.gui.client.presentation.admin.courseversion.courseversion.autobean.wizard.WizardSlideItem; import kornell.gui.client.presentation.admin.courseversion.courseversion.autobean.wizard.WizardSlideItemType; import kornell.gui.client.presentation.admin.courseversion.courseversion.autobean.wizard.WizardSlideType; import kornell.gui.client.presentation.admin.courseversion.courseversion.autobean.wizard.WizardTopic; import kornell.gui.client.presentation.admin.courseversion.courseversion.wizard.edit.IWizardView; import kornell.gui.client.presentation.admin.courseversion.courseversion.wizard.edit.WizardSlideItemImageView; import kornell.gui.client.presentation.admin.courseversion.courseversion.wizard.edit.WizardSlideItemVideoLinkView; import kornell.gui.client.presentation.admin.courseversion.courseversion.wizard.edit.WizardSlideItemView; import kornell.gui.client.util.view.KornellNotification; public class WizardUtils { public static final WizardFactory WIZARD_FACTORY = GWT.create(WizardFactory.class); public static Comparator<WizardSlideItemView> COMPARE_WIZARD_SLIDE_ITEM_VIEWS_BY_DISPLAY_ORDER = new Comparator<WizardSlideItemView>() { public int compare(WizardSlideItemView one, WizardSlideItemView other) { return one.getDisplayOrder().compareTo(other.getDisplayOrder()); } }; public static Comparator<WizardElement> COMPARE_WIZARD_ELEMENT_BY_ORDER = new Comparator<WizardElement>() { public int compare(WizardElement one, WizardElement other) { return one.getOrder().compareTo(other.getOrder()); } }; public static WizardElement findWizardElementByUUID(Wizard wizard, String wizardElementUUID){ for(WizardTopic topic : wizard.getWizardTopics()){ if(wizardElementUUID.equals(topic.getUUID())) return topic; for(WizardSlide slide : topic.getWizardSlides()){ if(wizardElementUUID.equals(slide.getUUID())) return slide; for(WizardSlideItem item : slide.getWizardSlideItems()){ if(wizardElementUUID.equals(item.getUUID())) return item; } } } return null; } public static boolean wizardElementHasValueChanged(WizardElement wizardElement){ if(wizardElement instanceof WizardTopic) return wizardTopicHasValueChanged((WizardTopic) wizardElement); else if(wizardElement instanceof WizardSlide) return wizardSlideHasValueChanged((WizardSlide) wizardElement); else if(wizardElement instanceof WizardSlideItem) return wizardSlideItemHasValueChanged((WizardSlideItem) wizardElement); else return false; } public static boolean wizardTopicHasValueChanged(WizardTopic wizardTopic){ boolean anySlideHasValueChanged = false; /*for(WizardSlide slide : wizardTopic.getWizardSlides()){ anySlideHasValueChanged = anySlideHasValueChanged || wizardSlideHasValueChanged(slide); }*/ return wizardTopic.isValueChanged() || anySlideHasValueChanged; } public static boolean wizardSlideHasValueChanged(WizardSlide wizardSlide){ boolean anyItemHasValueChanged = false; for(WizardSlideItem item : wizardSlide.getWizardSlideItems()){ anyItemHasValueChanged = anyItemHasValueChanged || wizardSlideItemHasValueChanged(item); } return wizardSlide.isValueChanged() || anyItemHasValueChanged; } public static boolean wizardSlideItemHasValueChanged(WizardSlideItem wizardSlideItem){ return wizardSlideItem.isValueChanged(); } public static WizardTopic newWizardTopic(){ WizardTopic wizardTopic = WIZARD_FACTORY.newWizardTopic().as(); wizardTopic.setUUID("new" + Math.random()); wizardTopic.setTitle("Novo Tópico"); wizardTopic.setOrder(0); wizardTopic.setBackgroundURL(""); List<WizardSlide> wizardSlides = new ArrayList<>(); WizardSlide wizardSlide = newWizardSlide(); wizardSlides.add(wizardSlide); wizardTopic.setWizardSlides(wizardSlides); return wizardTopic; } public static WizardSlide newWizardSlide(){ WizardSlide wizardSlide = WIZARD_FACTORY.newWizardSlide().as(); wizardSlide.setUUID("new" + Math.random()); wizardSlide.setTitle("Novo Slide"); wizardSlide.setWizardSlideType(WizardSlideType.CONTENT); wizardSlide.setOrder(0); List<WizardSlideItem> wizardSlideItems = new ArrayList<>(); wizardSlide.setWizardSlideItems(wizardSlideItems); return wizardSlide; } public static WizardSlide newWizardSlideQuiz(){ WizardSlide wizardSlideQuiz = newWizardSlide(); wizardSlideQuiz.setWizardSlideType(WizardSlideType.QUIZ); return wizardSlideQuiz; } public static WizardSlideItem newWizardSlideItem(){ WizardSlideItem wizardSlideItem = WIZARD_FACTORY.newWizardSlideItem().as(); wizardSlideItem.setUUID("new" + Math.random()); wizardSlideItem.setTitle(""); wizardSlideItem.setText(""); wizardSlideItem.setOrder(0); wizardSlideItem.setValueChanged(true); return wizardSlideItem; } public static native String stripIdFromVideoURL(String url) /*-{ return $wnd.stripIdFromVideoURL(url); }-*/; public static List<WizardElement> wizardToList(Wizard wizard){ List<WizardElement> wizardElementList = new ArrayList<>(); for(WizardTopic wizardTopic : wizard.getWizardTopics()){ wizardElementList.add(wizardTopic); for(WizardSlide wizardSlide : wizardTopic.getWizardSlides()){ wizardElementList.add(wizardSlide); } } return wizardElementList; } public static WizardElement getParentWizardElement(Wizard wizard, WizardElement wizardElement) { for (final WizardTopic wizardTopic : wizard.getWizardTopics()) { for (final WizardSlide wizardSlide : wizardTopic.getWizardSlides()) { if(wizardSlide.getUUID().equals(wizardElement.getUUID())){ return wizardTopic; } } } return null; } public static WizardElement getNextWizardElement(Wizard wizard, WizardElement currentViewedWizardElement) { if(currentViewedWizardElement == null) return null; List<WizardElement> wizardElementList = wizardToList(wizard); WizardElement wizardElement; for(int i = 0; i < wizardElementList.size(); i++){ wizardElement = wizardElementList.get(i); if(currentViewedWizardElement.getUUID().equals(wizardElement.getUUID())){ if(wizardElementList.size() > (i + 1)){ return wizardElementList.get(++i); } } } return null; } public static WizardElement getPrevWizardElement(Wizard wizard, WizardElement currentViewedWizardElement) { if(currentViewedWizardElement == null) return null; List<WizardElement> wizardElementList = wizardToList(wizard); WizardElement wizardElement; for(int i = 0; i < wizardElementList.size(); i++){ wizardElement = wizardElementList.get(i); if(currentViewedWizardElement.getUUID().equals(wizardElement.getUUID())){ if(i > 0){ return wizardElementList.get(--i); } } } return null; } public static String buildParentOrderFromParent(WizardElement wizardElement){ String parentOrder = wizardElement.getParentOrder(); Integer order = wizardElement.getOrder(); if(parentOrder == null){ return ""+(order+1); }else if(order == null){ return parentOrder; }else{ return parentOrder+"."+(order+1); } } public static String getItemNameByType(WizardSlideItemType wizardSlideItemType){ switch (wizardSlideItemType) { case IMAGE: return "Imagem"; case QUIZ: return "Quiz"; case TEXT: return "Texto"; case VIDEO_LINK: return "Video"; default: return ""; } } public static String getClasForWizardSlideItemViewIcon(WizardSlideItemType type){ switch(type){ case IMAGE: return "fa-picture-o"; case QUIZ: return "fa-check-square-o"; case TEXT: return "fa-text-height"; case VIDEO_LINK: return "fa-youtube-play"; default: return ""; } } public static void createIcon(Button btn, String iconClass){ Icon icon = new Icon(); icon.addStyleName("fa " + iconClass); btn.clear(); btn.add(icon); } }