package fi.utu.ville.exercises.stub; import java.util.logging.Level; import java.util.logging.Logger; import com.vaadin.shared.ui.label.ContentMode; import com.vaadin.ui.Label; import com.vaadin.ui.VerticalLayout; import fi.utu.ville.exercises.model.ExerciseData; import fi.utu.ville.exercises.model.ExerciseException; import fi.utu.ville.exercises.model.ExerciseTypeDescriptor; import fi.utu.ville.exercises.model.SubmissionInfo; import fi.utu.ville.exercises.model.SubmissionVisualizer; import fi.utu.ville.standardutils.Localizer; import fi.utu.ville.standardutils.StandardUIFactory; import fi.utu.ville.standardutils.TempFilesManager; /** * A quick-and-dirty class for loading {@link SubmissionVisualizer} -implementor for testing. * * @author Riku Haavisto * * @param <E> * tested {@link ExerciseData}-implementor * @param <S> * tested {@link SubmissionInfo}-implementor */ class SubmissionVisualizerTestingView<E extends ExerciseData, S extends SubmissionInfo> extends VerticalLayout { private static final Logger logger = Logger .getLogger(SubmissionVisualizerTestingView.class.getName()); private static final String submVisualizerTestViewId = "submvisualisertest"; private static final String submVisualizerTestExportLabel = "submvtest.export"; private static final long serialVersionUID = 2019222167594454557L; /** * Constructs a new {@link SubmissionVisualizerTestingView} to test implementors of {@link SubmissionVisualizer}. When using this factory-method no explicit * type-parameters are needed. * * @param toLoad * {@link ExerciseTypeDescriptor} for the exercise-type for which to load the {@link SubmissionVisualizer} * @param exerName * name (or id) of the exercise-instance to load * @param localizer * {@link Localizer} for localizing the UI * @param tempMan * {@link TempFilesManager} for managing temporary files * @return newly constructed {@link SubmissionVisualizerTestingView} */ public static SubmissionVisualizerTestingView<?, ?> getViewFor( ExerciseTypeDescriptor<?, ?> toLoad, String exerName, Localizer localizer, TempFilesManager tempMan) { SubmissionVisualizer<? extends ExerciseData, ? extends SubmissionInfo> toUse = null; try { toUse = StubExertypeClassLoader.loadVisualizer(toLoad, exerName, localizer, tempMan); } catch (ExerciseException e) { // TODO FIXME show message to user logger.log(Level.SEVERE, "Failed loading submission-visualizer", e); } return getViewFor(toUse, localizer); } /** * Constructs a new {@link SubmissionVisualizerTestingView} for given {@link SubmissionVisualizer} * * @param visualizer * {@link SubmissionVisualizer} to use * @param localizer * {@link Localizer} for localizing the UI * @return the loaded {@link SubmissionVisualizerTestingView} */ private static <E extends ExerciseData, S extends SubmissionInfo> SubmissionVisualizerTestingView<E, S> getViewFor( SubmissionVisualizer<E, S> visualizer, Localizer localizer) { return new SubmissionVisualizerTestingView<E, S>(localizer, visualizer); } private final SubmissionVisualizer<E, S> visualizer; private final Localizer localizer; /** * Constructs a new {@link SubmissionVisualizerTestingView} for the given {@link SubmissionVisualizer} * * @param main * {@link Localizer} for localizing the UI * @param visualizer * {@link SubmissionVisualizer} to use */ private SubmissionVisualizerTestingView(Localizer main, SubmissionVisualizer<E, S> visualizer) { setId(submVisualizerTestViewId); this.localizer = main; this.visualizer = visualizer; doLayout(); } /** * Draws the UI */ private void doLayout() { setMargin(true); setSpacing(true); setWidth("100%"); removeAllComponents(); this.addComponent(new StubViewHeaderBar(localizer, localizer .getUIText(StubUiConstants.VIEWER_TEST_INFO))); if (visualizer != null) { // Add panels to layout addComponent(visualizer.getView()); // addComponent(StandardUIFactory.getHr()); Label exportTitle = new Label( localizer.getUIText(StubUiConstants.EXPORT_OUTPUT)); addComponent(exportTitle); exportTitle.addStyleName("stub-section-title"); Label exportLabel = new Label( visualizer.exportSubmissionDataAsText(), ContentMode.PREFORMATTED); exportLabel.setId(submVisualizerTestExportLabel); addComponent(exportLabel); } else { this.addComponent(StandardUIFactory.getWarningPanel(localizer .getUIText(StubUiConstants.NO_SUBMISSIONS_TO_VISUALIZE))); } } }