blob: 4efd995c197b264265586b6c4ed5189061cb1e6a [file] [log] [blame]
/**
* Alernate mutator for key property.
* Used to override ancestor setKey method.
*/
public void setArticleString(String article) {
if (isBlank(article))
setArticle(null);
else
setArticle(Integer.valueOf(article));
}
/**
* Alernate accessor for key property.
* Used to override ancestor getKey method.
*/
public String getArticleString() {
Integer article = getArticle();
if (article==null)
return null;
return article.toString();
}
[ARTIMUS]
[Ordering is LIFO. Last thing done for a day is the first item listed.]
TODO:
- Add now string for articleInsert
- Check with HypersonicSQL
- Unit tests
31-DEC-01
---------
+ article.http.Form: Change reset to use setters.
06-NOV-01
---------
+ Rename article/Model,key/Model to Access (i.e. Data Access).
+ Update README.txt
+ Rename ApplicationResources to Resources
30-OCT-01
---------
+ article/SearchHours,SearchLast,SearchTitle,SearchProperty: Change check for parameters to occur before call to Model.
27-OCT-01
---------
+ wizard/*: Expand additional example code.
+ */Model,*/sql/Statement: update to use Scaffold StatementUtils, ConnectionPool.
+ classes/poolman.xml: update for new default resource name.
+ ConnectionPool, StatementUtils: move to Scaffolding.
26-OCT-01
---------
+ keys: add package.
+ http/ArticleForm: move to article/http/Form.
+ http/ModelHelper: Move to Scaffold.
+ sql/ConnectionPool: Move to Scaffold, and add wrapper.
25-OCT-01
---------
+ wizard/*: Initial version to test data access routines.
+ Search/*: Refactor most to subclass SearchProperties.
+ articles/SearchProperty: initial version.
+ sql/Statements: rename as StatementUtils.
+ articles/sql/Commands,Statements: initial versions.
+ sql/Data: Move most methods to articles/Model
+ articles/*: Refactor names from "query" to "model.
24-OCT-01
---------
+ search/Engine: update to throw QueryExceptions (per LuceneUtil changes).
+ articles/*: Refactor for changes in Scaffold.
+ *.jsp: Correct usage of html:html tag.
+ build.xml: Add WAR to deployment target.
23-OCT-01
---------
+ Store: let insert/update exceptions pass thru.
+ HelperAction: Enhance exception handling to use new ChainedException methods.
+ Refactor to use Scaffold query package (instead of util).
+ change "sql.*" tokens to "data.*"
21-OCT-01
---------
+ Refactor to use new Scaffold Query* and HelperAction class.
09-OCT-01
---------
+ Rename articles to artimus.
+ Rename ext to scaffold.
08-OCT-01
---------
+ AccessBean: refactor getMap(int) method.
+ AccessBean,AccessBeanList: Add first() method
+ client: refactor to call performCrud on ancestor.
+ ext.http.Access: add performCrud method.
27-SEP-01
---------
+ Access,AccessBean: General refactoring.
+ ArticleForm: Remove toMap method in favor of ancestor.
+ AccessBean: Conform to new DataBeanBase source.
+ DataBeanBase: Add default behavior for toMap using BeanUtil.describe
+ Convert MapAccess to DataBean, and refactor. Add getKeyInt,setKeyInt methods.
+ *: Review and revise Javadoc.
26-SEP-01
---------
+ AccessBeanMap: Remove unused class.
+ AccessBean,AccessBeanList: Remove methods not used in current version of application.
+ Access,Client: Refactor SaveConfirm method from ancestor Client class.
+ ArticleHelper: Move call to allocateKey from Access.crud.
+ ArticleHelper: Add loops around update,insert for multiple forms.
+ README.TXT: Update for Tomcat 4.0 production release.
+ ConnectionPool: Eliminate unnecessary statics
+ build.xml: Add Javadoc targete
+ com/*: Shorten package name to proweb
+ src/*: Move source under java, per new conventions.
+ WEB-INF/pages/*: Move pages to root; add stylesheet.
18-SEP-01
---------
+ ApplicationResources: Add missingHTML markup to error tags.
+ Engine: Update path for index (/var/lucene/articles)
+ poolman.xml
13-SEP-01
---------
+ LuceneUtils
10-SEP-01
---------
+ Menu.jsp: Add Create Index button for Lucene.
+ CreateIndex,Data,Statements,Commands: Add support for Lucene.
+ ConnectionPool: Add check for null connection.
+ README.TXT
09-SEP-01
---------
+ Render.java: intial version.
+ ArticleHelper,build.xml,strut.xml,: Add Lucene support.
+ ArticleForm, CreateTables, web.xml,
26-AUG-01
---------
+ ext.search.LucineUtils: initial version.
+ search.Engine: initial version.
+ Data: add selectArticle(target) method.
+ CreateIndex: initial version.
+ Add lucene.jar to lib
22-AUG-01
---------
+ Statements,Data,ArticleHelper: refactor.
+ ListForm: remove as redundant.
+ RequestUtils.getCollection: initial version.
20-AUG-01
---------
+ AccessBeanMap - initial version
+ Change ListAccessBean to AccessBeanList
+ Refactor ResultList as ResultCollection
+ Change package name to org.apache.struts.artimus
03-AUG-01
---------
+ ArticleHelper,Menu: Add support for title, author, content search.
+ ArticleList: initial version.
+ Commands: add SQL statments for title,author search.
+ Statements.getResultsLike: initial version.
02-AUG-01
---------
+ TASK: Test revised pages and control flow. All OK, but text search (need to recreate tables).
+ Access.setDispatch: initial version to maintain DispatchBean property.
+ Menu.jsp: initial version (should have done this first!).
+ config: Refactor to implement only what's needed for "Artimus-1".
+ ext: General refactoring and clean-up.
01-AUG-01
---------
+ : Refactor to use DispatchBean interface.
+ TASK: Refactor classes to use "dispatch" rather than "task"
+ Data,Statement: Add ResultList version of Select, to return a List.
+ Data,Statement: Add all String signatures for insert,update.
+ ListAccessBean: initial version.
+ TASK: Refactor DataAccess/AccessBean/Access/Helper classes to implement a List rather than a RowSet. Remove dependancies on Iterators for now, since this was causing ConcurrentModificationException's.
+ DispatchBean,ResultList: intial versions.
31-JUL-01
---------
+ TASK: Test input/output.
+ pages/List,Article: Enable bean, logic, and dbTags libs.
+ struts-config: update to use Client for Entry mappings.
+ Helper,Data,Commands: Add CRUD for Entry form.
+ Form: Update to declare AccessMap interface (methods already implemented).
+ Helper,Access,AccessMap: Initial version
+ CreateTables: Revise to call Data.object methods. Remove obsolete dependancies on SQL packages.
+ Data: initial version. Create high-level wrappers around calls to Statement.
+ CreateTables: Refactor DAO code into sql/Statements class.
+ CreateTables: Add insert of starter keys for other tables. Drop, create, test.
+ CreateTables: Change text to blob and varchar to char, for better compatability.
We will be using Lucene for full-text search, and MySQL will change char to varchar anyway.
+ TASK: test CreateTables.
+ mysql: create database artimus.
30-JUL-01
---------
+ struts-config: Add mapping for CreateTables.
+ CreateTables,Commands,ConnectionPool,RowSets,Statements: initial versions.
+ struts-config: update mappings for Form, including welcome and done.
+ pages/Article,Entry,List: update for Article properties, including field types and lengths. Add data-entry comments from spec.
+ http/Form: initial version.
+ Update "spec" (chapter 17) to reflect development changes.
29-JUL-01
---------
+ Extended headbanging session with Validator library. The client-side scripts are present but broken. Server-side validation is fine. Posted query to Struts list. Will proceed and return to this later
+ Draft Article, List, and Entry skeletons.
+ Test building javadoc (not working?)
+ Setup build.xml. Create src/build folder. Build skeleton classes.
+ Setup skeleton pages, forwards, mappings, Form, and Action.
+ struts-config.xml: Config for MySql, and ready alternate configs for hSQL and postgres.
+ web.xml: Add default config for validator, validator tags, dbTags.
+ lib: Place validator.jar, dbTags.jar, and hsqldb.jar under lib.
+ WEB-INF: Move *.tld's under tablibs; update web.xml
+ WEB-INF: Create src,doc,taglibs, and pages folders.
+ ROOT: Create artimus from Struts blank.
28-JUL-01
---------
+ doc: Second draft of "spec" as Chapter 17 text.
[]
dc:
title
creator
subject
description
contributor
date
publisher
type
format
identifier (url)
source
language
relation
coverage
rights
ocs:
image 88x31
format
contentType
updatePeriod
updateFrequency
updateBasis
ical:
COMPLETED
DTEND
DUE
DTSTART
DURATION
DTSTAMP
LAST-MODIFIED
RECUR
VEVENT
VTODO
VJOURNAL
eventDateStart
eventDateEnd
alarmDateStart
alarmDataEnd
[]
// Using Skeletons files with Struts.
Integrating Artimus in your own application (artimus.jar)
Internationalizing Artimus
[]
copy skel/View.jsp as ../Article.jsp
comment include for bean and logic tags at the top, and browser will ignore them.
insert {placeholders} next to bean:write tages where runtime content will go. update the property setting so these will be ready-to-go later.
remove right and left columns, so this is a one-column table.
add filter="false" to bean:write tag for article. this will output HTML as is, so we can use it in our article.
remove form buttons; body onload
change paths for local forwards on /Skel mapping to "/WEB-INF/pages/Article.jsp"
load and test.
reloading mappings.
[]
copy skel/Result.jsp as ../List.jsp
link date,topic,article as plain forwards
add forwards,actions to mappings
[]
copy skel/Form.jsp as ../Entry.jsp
change labels, but leave property1..0
adding fowards, actions to mappings.
[]
package naming - callout box
error handlng - log
[]
Thanks, Hans. We're on the same page now ;-)
I imagine you've also looked at the Oracle Portlet?
http://otn.oracle.com/products/iportal/htdocs/3_0_8_qt/qt_home.htm
http://otn.oracle.com/products/iportal/htdocs/3_0_8_qt/qt_frm.htm
http://otn.oracle.com/products/iportal/htdocs/kci/kcihome.html
In this context, I was thinking of creating backend "Providers" for things like RSS, and exposing this resource using Tiles as the actual "Portlet" part.
==
Provides a communication link between the portal services and portlets.
Implements session startup and provider login.
Acts as a proxy to all portlet calls.
Manages the portlet repository list.
==
I think what I wanted to look at first was an API for what Oracle calls "Providers".
http://portalstudio.oracle.com/servlet/page?_pageid=475&_dad=ops&_schema=OPSTUDIO&_mode=3
The idea being that a Provider could be plugged into an Action as a helper class, and wrap up what's needed into a bean to be displayed in a Tile.
The Providers could be setup as application resources, the way the Struts ActionMappings are setup, and the way the ValidatorForm configurations and Tiles definitions are setup.
At this point, I would look to container-managed security for the users, extending the idea of a database or JDBCRealm to provide single logon for the Providers, and as the basis for a user profile object to store customization options for the view.
At this point, some questions occur:
Does this intersect with the workflow API proposed to the commons and struts-dev last week? What's the difference between a portlet and a persistant workflow?
Are Jakarta portlets to be servlets, the way JSPs are servlets? If not, should they be?
Or, from a patterns perspective, are portlets just some kind of helper object?
Could some kind of porlet be packaged as a set of ActionMappings, Actions, JSPs, and associated classes, and plunked into the middle of a Struts application?
Oracle Portlet Provider -> Struts Action
What essential services does a portlet API need to provide?
* Discovery
* Authorization
* Profiles (user customization, skins)
* Presentation fragments (scrape)
* Resource configuration, application and user (profiles?)
Could an abstract PortletProfile object (or interface) be used to manage
My initial feeling is that, in a Java MVC environment, a Portlet should be a specialized controller servlet that exposes services to the application's controller servlet through a specific API. The Portlet would expose itself through the ServletContext, where it can be called upon by other servlets in the application. We should be able to load a portlet servlet into any arbitrary application, just as we can load a JSP servlet into any arbitrary application, without modifying the container.
[]
select donor,fullName,street,postOffice,postalCode,item,name,qtyReceived,market from gavel_donor D,gavel_item I where D.donor=I.donor order by donor;
SELECT I.donor,fullName,item,name FROM gavel_item I LEFT OUTER JOIN gavel_donor D ON (I.donor=D.donor) ORDER BY fullName,donor;
[]
/*
public void setNext(Object source) {
// java.lang.IllegalAccessException
// pop: IllegalAccessException, InvocationTargetException
// des: + NoSuchMethodException
BeanUtils.populate(
this.rows.next(),
BeanUtils.describe(source)
);
}
public void getNext(Object target) {
BeanUtils.populate(
target,
BeanUtils.describe(this.rows.next())
);
}
public Map nextToMap() {
return BeanUtils.describe(this.rows.next());
}
public static void populateBean(Object target, Object source) {
BeanUtils.populate(
target,
BeanUtils.describe(source)
);
}
*/