+ All Categories
Home > Technology > Gwt.create

Gwt.create

Date post: 17-Jul-2015
Category:
Upload: mauricio-salaboy-salatino
View: 2,795 times
Download: 0 times
Share this document with a friend
58
Rapidly Building Cloud IDEs with uberfire Alexandre Porcelli (US) Michael Anstis (EU) Mauricio Salatino (EU)
Transcript
Page 1: Gwt.create

Rapidly Building Cloud IDEs with uberfireAlexandre Porcelli (US)Michael Anstis (EU)Mauricio Salatino (EU)

Page 2: Gwt.create

W4H

● What?

● Why?

● Who?

● Where?

● How?

● Q&A

Page 3: Gwt.create

UberFire is a web framework for a superior experience in building extensible workbenches and console type applications.

It provides an Eclipse like workbench experience for the web, helping you to make maintainable, customizable workbench-style apps in no time flat.

Our ultimate goal in uberfire is to provide a strong ecosystem around it, based on a rich set of pluggable components and a strong infrastructure, allowing different type of users easily build Rich Web Apps on top of it….

What?

Page 4: Gwt.create

● GWT

○ Java

○ ResourceBundles

○ Browser support

● Errai

○ Client-side CDI

○ Templated views

○ Message bus

○ RPC

What?

Page 5: Gwt.create

● Workbench● VFS● VFS Metadata Indexing● Security● Extensions● Integration

What?

Page 6: Gwt.create

metadata preferences

gwt

errai

index / search

cluster

mvp

cdi

bus ui

model

securityvfs

runtime plugin

window mgmt

nsew template ...

What? Components

Page 7: Gwt.create

coreUBERFIRE EXTENSIONS

KIE EXTENSIONS

GUVNOR

DASHBUILDER

FORM MODELER

WIRES

SOCIAL

BUILD & PROVISIONING

What? Ecosystem

APPS

RUNTIME PLUGINS

Page 8: Gwt.create

● JBoss / RedHat

● Drools/jBPM team

● Working closely with Errai team

Who?

Page 9: Gwt.create

● Composition

● Integration

● Interoperability

● Legacy

Why?

Page 10: Gwt.create

http://www.uberfireframework.org/https://github.com/orgs/uberfireIRC: irc.freenode.org #uberfireGoogle Groups

Where?

Page 11: Gwt.create

● Annotation driven development● Layout managers● Perspectives● Screens● Editors● Life-cycles● PlaceManager

How? Workbench

Page 12: Gwt.create

Screen 1 JAR(s)

How? Composition

Web App WAR

Screen 2 JAR(s) Feature X JAR(s)Bootstrap /

config classes

Page 13: Gwt.create

PERSPECTIVE

How? Hierarchical composition

Workbench

PERSPECTIVE PERSPECTIVE

PANEL PANELPANEL

PARTPART PART

Page 14: Gwt.create

How? Hierarchical Composition

Page 15: Gwt.create

Workbench

How? Hierarchical Composition

Page 16: Gwt.create

Perspective

How? Hierarchical Composition

Page 17: Gwt.create

Panel

How? Hierarchical Composition

Page 18: Gwt.create

Workbench

Perspective

Panel

How? Hierarchical Composition

Page 19: Gwt.create

How? Hierarchical Menus

WORKBENCH

PERSPECTIVE

PART

Context menus

Context menus

Context menus

Page 20: Gwt.create

How? Hierarchical Menus

Page 21: Gwt.create

Workbench

How? Hierarchical Menus

Page 22: Gwt.create

Perspective

How? Hierarchical Menus

Page 23: Gwt.create

Part

How? Hierarchical Menus

Page 24: Gwt.create

● @WorkbenchPerspective

● @WorkbenchScreen

● @WorkbenchEditor

● @WorkbenchPopup

How? Components

Page 25: Gwt.create

● @WorkbenchPartTitle

● @WorkbenchPartTitleDecoration

● @WorkbenchPartView

● @WorkbenchMenu

● @WorkbenchToolBar

How? Scaffolding

Page 26: Gwt.create

● @OnStartup

● @OnClose

● @OnFocus

● @OnLostFocus

● @OnMayClose

How? Components lifecycle

Page 27: Gwt.create

@WorkbenchPerspective(identifier = "HomePerspective", isDefault = true)

public class HomePerspective {

@Perspective

public PerspectiveDefinition buildPerspective() {

final PerspectiveDefinition p = new PerspectiveDefinitionImpl();

p.setName( "Home Perspective" );

p.getRoot().addPart( new PartDefinitionImpl( new DefaultPlaceRequest( "HomeScreen" ) ) );

return p;

}

}

How? Perspectives

Page 28: Gwt.create

@WorkbenchScreen( identifier = "MyFirstPanel" )

public class MyFirstPanel extends SimplePanel {

public MyFirstPanel() {

setWidget( new Label( "Hello World 1" ) );

}

@WorkbenchPartTitle

public String myTitle() {

return "My First Panel!";

}

}

How? Screens

Page 29: Gwt.create

@WorkbenchEditor( identifier = "TextEditor", supportedTypes = { TextResourceType.class })

public class TextEditorPresenter {

@WorkbenchPartTitle

public String getTitle() {

return "Text Editor [" + path.getFileName() + "]";

}

@WorkbenchPartView

public IsWidget getWidget() {

return view; //injected

}

}

How? Editors

Page 30: Gwt.create

@WorkbenchEditor( identifier = "TextEditor", supportedTypes = { TextResourceType.class })

public class TextEditorPresenter {

@Inject

TextEditorView view;

@OnStartup

public void onStart( final Path path ) {

//Load content and initialise view

this.view.setContent( loadContent( path ) );

}

}

How? Life-cycles

Page 31: Gwt.create

public interface PlaceManager {

void goTo( final String identifier );

void goTo( final PlaceRequest place );

void goTo( final Path path );

void closePlace( final String id );

void closePlace( final PlaceRequest place );

...

}

How? PlaceManager

Page 32: Gwt.create

@Inject

PlaceManager placeManager;

...

menus = MenuFactory

.newTopLevelMenu( "Go somewhere" )

.respondsWith( new Command() {

@Override

public void execute() {

placeManager.goto( "a-screen-identifier" );

}

} )

.endMenu()

.build();

...

How? PlaceManager

Page 33: Gwt.create

● Java 1.7 NIO2 backport● Consistent client-side\server-side API● Pluggable implementations

○ GIT

● Concurrency● Clustering

○ Apache ZooKeeper○ Apache Helix

How? VFS

Page 34: Gwt.create

● Lucene

● Pluggable indexers

● Pluggable query service

How? VFS indexing

Page 35: Gwt.create

● Pluggable○ Multiple backends

● Portable○ Same API for Client and Server

● Auth/Authz● Declarative/Programmatic

○ API○ Annotations

How? Security

Page 36: Gwt.create

@WorkbenchScreen(identifier = "MyScreen")@Roles({"Admin", "Management"})public class MyScreen {

@WorkbenchPartView public IsWidget getView() { return new SimplePanel(); }

@WorkbenchPartTitle public String getTitle() { return "My Screen"; }}

How? Security

Page 37: Gwt.create

How? Security

public class Project implements RuntimeResource { private Collection<String> roles = new ArrayList<String>();

@Override public String getSignatureId() { return getClass().getName() + "#" + getRootPath().toURI(); }

@Override public Collection<String> getRoles() { return roles; }

@Override public Collection<String> getTraits() { return Collections.emptySet(); }}

Page 38: Gwt.create

● Plugins● Apps● Wires● Property Editor● Social Activities● DashBuilder

How? Extensions

Page 39: Gwt.create

How? Plugins

Page 40: Gwt.create

How? Plugins / Perspectives

Page 41: Gwt.create

How? Plugins / Perspectives

Page 42: Gwt.create

How? Plugins / Screens

Page 43: Gwt.create

How? Plugins / Menus

Page 44: Gwt.create

How? Apps

Page 45: Gwt.create

How? Wires

Page 46: Gwt.create

How? Properties Editor

Page 47: Gwt.create

How? Social Activities

Page 48: Gwt.create

How? Social Activities

Page 49: Gwt.create

How? Dash Builder

Page 50: Gwt.create

● AngularJS○ Using AngularJS extensions○ Using uberFire in AngularJS

● Typescript● Coffeescript● Next fashionable script...

How? Integration

Page 51: Gwt.create

Usage<html>

<body>

...

<!-- Declare Uberfire application-->

<script type="text/javascript">uberfireAngularAppName = "myapp";</script>

<!-- Uberfire GWT modules -->

<script type="text/javascript" src="org.uberfire.KieUberfireJS/org.uberfire.KieUberfireJS.nocache.js"></script>

<!-- AngularJS minimum -->

<script type="text/javascript" src="js/angular-1.0.7.min.js"></script>

<!-- AngularJS Uberfire directives -->

<script type="text/javascript" src="js/uberfire.components.js"></script>

</body>

</html>

How? AngularJS + uberfire

Page 52: Gwt.create

Usage...

<body>

...

<!-- AngularJS -->

<div ng-app="myapp">

What is your name?<input type="text" ng-model="sometext"/>

<h1>Hello {{ sometext }}</h1>

<uberfirecomponent id="id1" name="Dora" uf-component="welcome"></uberfirecomponent>

</div>

...

</body>

How? AngularJS + uberfire

Page 53: Gwt.create

Usage@WorkbenchScreen(identifier = "welcome")

public class WelcomeScreen extends Composite {

@UiField

TextBox name;

...

@OnStartup

public void onStartup( final PlaceRequest place ) {

name.setText( place.getParameter( "name", "Who is there?" ) );

}

...

}

How? AngularJS + uberfire

Page 54: Gwt.create

Usage<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"

xmlns:b="urn:import:com.github.gwtbootstrap.client.ui">

<b:Hero addStyleNames="{style.welcome}">

<b:Heading size="2">Welcome to UberFire,</b:Heading>

<b:TextBox ui:field="name"/>

</b:Hero>

</ui:UiBinder>

How? AngularJS + uberfire

Page 55: Gwt.create

How? AngularJS + uberfire

Page 56: Gwt.create

How? Cloud provisioning

Page 57: Gwt.create

demo gods be gentle...

Demos

Page 58: Gwt.create

Q&A


Recommended