WOdka
-
Upload
wo-community -
Category
Technology
-
view
402 -
download
2
Transcript of WOdka
WOdkaKen ISHIMOTO (K’s Room Japan)
David HOLT (CSCW System Corporation)
Dashboard
jQuery
Authentication
Central personStamped enterprise object
logical delete
Domains Avatar
Roles & Permissions
NotificationCenter
Woopra
D3W
new Rule system
custom D2W Component
Navigation Handler
Rule Validation
Navigation Query
Button Delegate
Button Confirm Delegate
CSV Export
CSV Import
SnoWOman
Pick-listFast User switching Modern look CSS3
Multi-language Support
GumbyjQueryMobile D2W
REST
Ant
• WOdka is a Framework that originally was developed in Japan
• WebObjects Development by K’s Room & A10
What is WOdka
Who works with WOdkaKen Ishimoto
Paul Yu
David Holt
Paul Halliday
Masahiko Tani
Hiroyuki Fukui
Amedeo Mantica
What Frameworks are included?• AuditTrail (improved version)
• JQueryMobileD2W
• ModernistD2W (improved Modernlook)
• D3WCore
• D3WExcelSupport (ExcelLook improved version)
• Notification Center
• Database Driver
• JapserReport (improved version)
• SnoWOman
• SKIN’s for Look
• Barcode
• CSV Import
• WOdka + WOdkaBaseModel
• JGroupsSynchronizer (improved)
• Emoji + KeyValueDataStorage
• more ...
WOdka Structure & History
WebObjects
WOnder
WOdka
WOdka Application
3-5 years ago
WebObjects
WOnderWOdka
2 years ago
WebObjects
WOnder
WOdka
1 years ago
WebObjects
WOnder
WOdka
today
WebObjects
WOnder
WOdka
How big is WOdka?
Project Wonder WOdka
Logical Line of Code 156996 109852
59%
41%
Logical LOC
Project Wonder WOdka
Project Wonder WOdka
Comment Line of Code 79360 60001
57%
43%
Comment LOC
2013-04-13
unified Dashboard
Dashboard
• Application shared Dashboard for Developer and Administrator
• Frameworks can create Dashboard Entries and add itself to the Dashboard
• so lots of Function you can access asap after creating a WOdka Application.
System Properties Display
JQuery Framework
ERModernJQuery• works with Ajax Framework together
• works in D2W Apps
• more then 60 jQuery Components
• lots of Custom D2W jQuery Components
• lots of jQuery Theme Components
• Input-fields for Date, Time, DateTimestamp
• Currency with live converting
• SVG + SVG Animation, Graphs
• ... to much to write here
Authentication
Authentication
• WOdkaBaseModelFramework is including following Feature
• Whitelist IP addresses
• Blacklist IP addresses
• Login Response & Request Logging
• IP Restrictions with DNS Support
Authentication
• Login Screen
• Change Password Screen
• Authentication check
• Authentication password storage
Central person / Partial entity
• Central Person used for convenience of authentication
• Used in stamped objects (who created or modified an object)
• Used in virtual deletion (who deleted an object)
Central person / Partial entity
• When you generate Migration 0 for your app you have to make sure that you change "newTableNamed" to "existingTableNamed" for partial entities because your base model will now create the table. Y
• You can include attributes such as ID for convenience, but you wouldn't recreate them in the partial migration class.
• Relationships are created to the Partial Entity so that you do not change your base model.
Central person / Partial entity
Stamped enterprise object
Stamped enterprise object
• public abstract class _Person extends me.webobjects.eof.stamp.partial.WOdkaStampedPartialEnterpriseObject
• automatically records timestamps and the user responsible for object creation and modification
• add ids and timestamps to your model
Logical (virtual) delete
Logical (virtual) delete
• public static class PersonClazz<T extends Person> extends _Person._PersonClazz<T> implements IWOdkaLogicalDeleteSupport
• marks object for deletion but doesn’t actually delete the object
• qualifier ensures the object will never display in the application. System user can override this behaviour easily.
Domains (Multitier)
Domains (Multi-tier)
• Framework Domain integration
• switching between Domains
• unified CoreQualifier
• automatically D2W Handling
• Template Qualifier (TODO)
Avatar integration
Avatar integration
• WOdkaDisplayGravatar
• D2W CustomCompnents
Roles and Permissions
Roles and Permissions• Person n:n Roles support
• each Roles can have unlimited Access permissions
• Access permissions to
• Navigationbar
• SubNavigation
• BranchDelegates
• Tabs
• Section
• Property
Notification Center
Notification Center
ERNotificationCenter
Application
WOdkaQuartzScheduler
call NotificationCenter for doing some Business
save to Databasesend out via Quartz ...
FAX SMS MAILHTML
MAILMD
MAILMassMail
RabbitMQ
ServerSync APNSREST
Prowl
Woopra integration
D3W
new rules/entity specific rules
Entity Specific Rules• Each entity has its own rule model.
( This makes Development much more easier if you are working in a Team )
• After running the App the first time, it will create all D2W Model-files and standard Rules automatically.
• Default rules for each entity are EOGenerated in the class files for cutting and pasting into RuleModeler if you need.
Rule Abbreviations• EN is short form for entity.name
• # represents the value of the Entity Name derived from the model where the rule is located
• EN = ‘#’ =>
• Allows you to write generic rules for all entities that only apply in the model where the rule is located
• You can efficiently copy and paste rules from model to model without having to modify them
Rule Abbreviations cont.
• PC = pageConfiguration
• DPK = displayPropertyKeys
• crud = ‘1100’, isEntityInspectable, isEntityEditable, isEntityDeletable (3-4 Rules you can access now with 1 Rule)
improved Rules
• "completed | doneBy"
• "-completed|doneBy"
• "testPattern.modernID{testPattern.id} | testPattern"
• " English:nameInEnglish | Japanese:nameInJapanese "
• ...
D2W Rule Validation
D2W Rule Validation
• wrote a Attribute name not correct?
• Misspelling ?
• wrong Relationship ?
• changes some Name in your EO Modeler and get screwed?
Have you seen this with D2W?
D2W Rule Validation
• run D2W Validation and it will show all your Errors
easy custom component paged2w
easy custom component page
// creating a CustomPage is easier than ever
public WOComponent customPageAction() { CustomPageInterface cpi = D2W.factory().customPageForComponentNamed(CustomSamplePage.class.getSimpleName(), session()); return (WOComponent) cpi; }
Navigation handled without rules
NavigationMenu.plistWAY 1 :
{ name = "CustomPage"; action = "session.navController.errorPageAction";},
// set the action to session.navController.<<MethodName>>// this will call your NavigationController
// the controller will look like
public class NavigationController extends NavigationD2WControllerBase
public WOComponent errorPageAction() { ErrorPageInterface epi = D2W.factory().errorPage(session()); epi.setMessage("[[Error Message]]"); epi.setNextPage(session().context().page()); return (WOComponent) epi; }
// last you have to create the navigationState in the D2W Model1011 : pageConfiguration = 'CreateUser' => navigationState = "Master.user.createUser" [com.webobjects.directtoweb.Assignment]
NavigationMenu.plist (NEW)WAY 2 : NEW
{ name = "Todo"; action = "session.handlers.todo.todoTodo.listToDoAction"; children = ("TodoTodo", "TodoCategory");},{ name = "Messages"; action = "session.handlers.messages.chatMessages.queryMessagesAction"; children = ("ChatMessages");},
// set the action to session.handlers.<<navigationState>>.<<D2WAction>>// this will calculate the navigationState and create the Action for D2W in 1 Line.// No need to write 100’s of navigationState Rules anymore
NavigationQuery
NavigationQuery
This feature will display a Querybox in the TopMenu Area so the user can perform a quick search if needed.For example, if he is looking for the Barcode of a product, he doesn’t have to navigate first to a query page, he can go directly to the quick query box.
Button Delegate
Button Delegate
• Rule : 601 : EN = 'Todo' => nextPageDelegate = "me.webobjects.delegate.button.TodoButtonDelegate" [er.directtoweb.ERDDelayedObjectCreationAssignment]
Button Delegate/**
* me.webobjects.delegate.button.TodoButtonDelegate */public class TodoButtonDelegate extends ERMD2WEXTBranchDelegate { /* ERQMD2WBranchDelegate */
//******************************************************************** // sampleOne //********************************************************************
@D2WDelegate ( scope = "", availableTasks = "inspect", availablePages = "InspectToDo" ) public WOComponent sampleOne(WOComponent sender) { // Initialize Utility Method ユーティリティー・メソッドの初期化 setSender(sender);
// ... do your stuff here System.err.println(object()); // ... do your stuff here
return sender().context().page(); }
Button Delegate(Confirm)
Confirm
• Rule : 601 : EN = 'Todo' => nextPageDelegate = "me.webobjects.delegate.button.TodoButtonDelegate" [er.directtoweb.ERDDelayedObjectCreationAssignment]
Confirm
Button Delegate(CSV Export)
CSV Export
• Rule : 601 : EN = 'Todo' => nextPageDelegate = "me.webobjects.delegate.button.TodoButtonDelegate" [er.directtoweb.ERDDelayedObjectCreationAssignment]
• 601 : EN = 'Todo' => target_showCsvOutput = "_blank" [com.webobjects.directtoweb.Assignment]
Button Delegate(CSV Import)
CSV Import• 603 : EN = '#' => importDelegateName =
"me.webobjects.delegate.csv.ToDoImporter" [com.webobjects.directtoweb.Assignment]
• 603 : EN = '#' => importPropertyKeys = ("name", "level", "description") [com.webobjects.directtoweb.Assignment]
• 603 : EN = '#' => importSkipLines = "1" [com.webobjects.directtoweb.Assignment]
• <wo:CSVImport entityName="Product" skipLines="0" keys="$keysUC" delegateClass="com.ksroom.delegate.csv.ProductImporter" useSelector="true" />
Button Delegate(Pick List)
Pick List
• Rule : 601 : EN = 'Todo' => nextPageDelegate = "me.webobjects.delegate.button.TodoButtonDelegate" [er.directtoweb.ERDDelayedObjectCreationAssignment]
Pick List/**
* me.webobjects.delegate.button.TodoButtonDelegate */public class TodoButtonDelegate extends ERMD2WEXTBranchDelegate { /* ERQMD2WBranchDelegate */
//******************************************************************** // pickSample //********************************************************************
@D2WDelegate ( scope = "", availableTasks = "pick", availablePages = "ListToDo" ) public WOComponent pickSample(WOComponent sender) { // Initialize Utility Method ユーティリティー・メソッドの初期化 setSender(sender);
// ... do your stuff here System.err.println(objects()); // ... do your stuff here
return parentComponent(); }
Button Delegate(Migration Data Creation)
Migration Data Creation
• 602 : EN = '#' => nextPageDelegate = "me.webobjects.migration.WOdkaMigrationMySQLDelegate" [er.directtoweb.ERDDelayedObjectCreationAssignment]
• 602 : EN = '#' => target_showMigrationCode = "_blank" [com.webobjects.directtoweb.Assignment]
Migration Data Creation
602 : EN = '#' => migrationDelegateSubEntities = ("ToDoCategory") [com.webobjects.directtoweb.Assignment]
Fast User switching
Fast User switching
• following Rule you can find in WOdkaBaseModel Framework
95 : (PC = 'InspectPerson' and session.application.isDevelopmentMode = 1) => nextPageDelegate = "me.webobjects.delegate.button.PersonDebugButtonDelegate" [er.directtoweb.ERDDelayedObjectCreationAssignment]
Fast User switching
Go to Inspect Person you will find a Branch Button there.
to go back to your Main Developer Account
but :back: into the NavigationQuery
Modernlook
D2W Custom Components
Retina CheckboxesGoogle Maps
pList Editor
ModernlookCSS3
default Modernlook
Domain switching
Training Application
• 100 : *true* => isTrainingApp = "true" [com.webobjects.directtoweb.BooleanAssignment]
CSS3 Button with Hover effect
Buttons are all now CSS3created with a new D2WButtons class
CSS3 Navigationmenu
100 : *true* => useCss3TopMenu = "true" [com.webobjects.directtoweb.BooleanAssignment]
MultiLanguage SupportLanguage Switching
MultiLanguage SupportLanguage Switching
Language Switching Domain Switching
Gumby
Gumby our D2W SASS Skin
Gumby our D2W SASS Skin
SnoWOman 1.5
SnoWOman 1.5
• CMS System
• D2W List-page can now add to a CMS Page
• D2W Inspect-page (coming in future releases)
JQueryMobile D2W
JQueryMobile D2WLogin
REST AuthenticationREST Template and D2W Support
REST AuthenticationREST Template and D2W Support
• automatically REST Templates creations
• D2W Rest Support
• iOS Core Model Creation (coming soon)
• automatically iOS Code Creation (coming soon)
One more thing...
D2WModeler
2.0
ANT build scripts• improved build scripts for Apps and Framework
• upload to Server support after build
EO Templates• Partial Support & Access Permission for each Entity
Jenkins Templatesnew Application Templates
Thanks to• Masahiko TANI - A10 Objects Inc., (Japan)
• Hiroyuki FUKUI - Astonish Create (Japan)
• David Holt - CSCW Systems Corporation (Canada)
Special Thanks to• Paul YU - Green orchid llc (USA)
Thank YouWOWODC
2013