package org.vaadin.mideaas.frontend; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; import java.util.Scanner; import com.vaadin.server.BrowserWindowOpener; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Button.ClickListener; import com.vaadin.ui.CustomComponent; import com.vaadin.ui.Notification; import com.vaadin.ui.UI; import com.vaadin.ui.VerticalLayout; @SuppressWarnings("serial") public class VisualDesignerConnector extends CustomComponent { private final String visualDesignerUrl; private final String modelId; private final ClaraEditor claraEd; private final VerticalLayout layout = new VerticalLayout(); public VisualDesignerConnector(String modelId, String visualDesignerUrl, ClaraEditor claraEd) { this.modelId = modelId; this.visualDesignerUrl = visualDesignerUrl; this.claraEd = claraEd; setCompositionRoot(layout); } @Override public void attach() { super.attach(); URI myUrl = UI.getCurrent().getPage().getLocation(); String myUrlRoot = myUrl.getScheme() + "://" + myUrl.getAuthority() + myUrl.getPath(); String modelUrl = myUrlRoot + "?getmodelid=" + modelId; String modelUrlEnc; try { modelUrlEnc = URLEncoder.encode(modelUrl, "UTF-8"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); return; } String url = visualDesignerUrl + "?restartApplication&modelid=" + modelId + "&modeluri=" + modelUrlEnc; BrowserWindowOpener opener = new BrowserWindowOpener(url); Button button = new Button("Open Visual Designer"); button.setIcon(Icons.APPLICATION_ARROW); opener.extend(button); layout.addComponent(button); Button fetchButton = new Button("Get from Visual Designer"); fetchButton.setIcon(Icons.ARROW_180_MEDIUM); fetchButton.addClickListener(new ClickListener() { @Override public void buttonClick(ClickEvent event) { fetch(modelId); } }); layout.addComponent(fetchButton); } private void fetch(String modelId) { try { String xml = getModelFromUrl(visualDesignerUrl + "?getmodel&modelid=" + modelId); claraEd.setXml(xml); } catch (IOException e) { Notification.show("Error: " + e.getMessage(), Notification.Type.ERROR_MESSAGE); } } private String getModelFromUrl(String uri) throws IOException { URL url = new URL(uri); URLConnection conn = url.openConnection(); return convertStreamToString(conn.getInputStream()); } private static String convertStreamToString(InputStream is) { Scanner scanner = new Scanner(is); scanner.useDelimiter("\\A"); String s = scanner.hasNext() ? scanner.next() : ""; scanner.close(); return s; } }