[THIS IS HISTORY OF PageMixer framework] ******************************************************************************* **** PageMixer 3.1(2006/04/03) Major topics of this version are: - enrichment/enhancement of Struts co-operation(for Struts 1.2.x) - provide JUnit co-operation (sorry, not yet well-documented, but JavaDoc-ed) [BUG FIX] - ServletConsumerContext.CookieKey (jp.ne.dti.lares.foozy.pagemixer.servlet.ServletConsumerContext.CookieKey) Old implementation might cause NullPointerException, because HttpServletRequest#getCookie returns null array when there is no cookie. [NEW & DEPRECATION for source] - Attribute (jp.ne.dti.lares.foozy.pagemixer.Attribute) - Add #getQuote() method - DeclarationValue (jp.ne.dti.lares.foozy.pagemixer.DeclarationValue) - Add #getQuote() method - HTMLSymbolSet (jp.ne.dti.lares.foozy.pagemixer.HTMLSymbolSet) - add below public member fields - NOFRAMES - ONBLUR - ONCHANGE - ONCLICK - ONDBLCLICK - ONFOCUS - ONKEYDOWN - ONKEYPRESS - ONKEYUP - ONLOAD - ONMOUSEDOWN - ONMOUSEMOVE - ONMOUSEOUT - ONMOUSEOVER - ONMOUSEUP - ONRESET - ONSELECT - ONSUBMIT - ONUNLOAD - MutableStartTagToken (jp.ne.dti.lares.foozy.pagemixer.MutableStartTagToken) - add #ensureMutability() method - SymbolSet (jp.ne.dti.lares.foozy.pagemixer.SymbolSet) - add #importSymbols() method - Token (jp.ne.dti.lares.foozy.pagemixer.Token) Enhance attribute value getting. - add #getAttributeValue(Symbol, String) method - add #hasAttribute(Symbol, String) - URL (jp.ne.dti.lares.foozy.pagemixer.URL) Enhance URL value handling. - add #getScheme() method - add #setScheme() method - add #getHost() method - add #setHost() method - add #getPort() method - add #setPort(int)/#setPort(Integer)/#setPort(String) methods - add #getURI() method - add #setURI() method - Utils (jp.ne.dti.lares.foozy.pagemixer.Utils) - add #calcHash() method - add #calcHashes() method - add #equals() static method - add #toString() static method - FilterPipeline (jp.ne.dti.lares.foozy.pagemixer.mixer.FilterPipeline) Enhance sub-filter order control. - add #add(Filter) method - add #add(Filter[]) method - add #addFilters() method - add #addFactories() method - SequenceDataIterationFilter (jp.ne.dti.lares.foozy.pagemixer.mixer.SequenceDataIterationFilter) - add #add(Filter) method (see "FilterPipeline" also) - SequenceHybridFilter (jp.ne.dti.lares.foozy.pagemixer.mixer.SequenceHybridFilter) - add #getFilter() method This allows you to create sub filters after "super" or its constructor invocation. - AttrTrimFilter(NEW) (jp.ne.dti.lares.foozy.pagemixer.html.AttrTrimFilter) This provides functionality to trim specified attribute from token sequence. - PageMixerSymbolSet(NEW) (jp.ne.dti.lares.foozy.pagemixer.html.PageMixerSymbolSet) This manages PageMixer specific(= not valid under HTML specification) symbols. e.g.: "external", which controls URL rewriting and so on. - PageMixerAttributeValue(NEW) (jp.ne.dti.lares.foozy.pagemixer.PageMixerAttributeValue) This manages PageMixer specific attribute values. - PageMixerSymbolTrimFilter (jp.ne.dti.lares.foozy.pagemixer.html.PageMixerSymbolTrimFilter) This provides functionality to trim attributes, which have PageMixer specific symbol as their name. - SelectInsetFilterTest (jp.ne.dti.lares.foozy.pagemixer.html.SelectInsetFilterTest) Now, this puts '' token after text token, which is selection label, insetting. - URLEditFilter(NEW) (jp.ne.dti.lares.foozy.pagemixer.html.URLEditFilter) This provides you easy URL attribute editting funcionality. - URLRewriteFilter (jp.ne.dti.lares.foozy.pagemixer.html.URLRewriteFilter) - sensitive to "external" attribute You can prevent this filter from appending session ID into token, which has URL attribute, by specifing "external" attribute. - add URLRewriteFilter.A(TokenWatcher) constructor - add URLRewriteFilter.IMG(TokenWatcher) constructor - add URLRewriteFilter.FORM(TokenWatcher) constructor - add URLRewriteFilter.LINK(TokenWatcher) constructor - XHTMLDetectFilter (jp.ne.dti.lares.foozy.pagemixer.html.XHTMLDetectFilter) This stores value into context by specified key object, when this detects 'DOCTYPE ' token for XHTML. - FilterFactory (jp.ne.dti.lares.foozy.pagemixer.servlet.FilterFactory) - change order to insert filter into pipeline OLD: earlier specify, lateer consume NEW: earlier specify, earlier consume - PageServlet (jp.ne.dti.lares.foozy.pagemixer.servlet.PageServlet) - change functionality overriding policy Now, you can override all customization points by deployment descriptor(DD: web.xml) describing, even though the PageServlet derived class, which you specify in DD, customizes it in its construction time. - RequestMethodKey(NEW) (jp.ne.dti.lares.foozy.pagemixer.servlet.RequestMethodKey) This allows you to get value from HttpServletRequest specific method invocation. e.g.: Servlet context path from HtppServletRequest#getContextPath() can be gotten by RequestMethodKey#CONTEXT_PATH - ServletConsumerContext (jp.ne.dti.lares.foozy.pagemixer.servlet.ServletConsumerContext) - enhance parameter checking OLD: this assumed that parameter, which is specified to getValue()/setValue()/unsetValue() methods, is instance of 'KeyCommand' interface(or null, otherwise). NEW: this treat non-'KeyCommand' parameters as null. - re-define some inner classes as non inner ones Some inner classes to identify Servlet environment specific value are re-defined as non inner ones. Re-defined ones are: - ApplicationKey - ContextInitKey - CookieKey - ParameterKey - ReqHeaderKey - RequestKey - ResHeaderKey - ServletInitKey - SessionKey - add some keys to look value up in context Key objects shown below are provided as "final static public" member fields. - BASE_HREF_KEY(moved from StrutsConsumerContext) - CONTEXT_PATH_KEY(moved from StrutsConsumerContext) - XHTML_KEY - make type of key objects narrowed Now, key objects are defined not as "Object", but as concretized class. - ServletUtil (jp.ne.dti.lares.foozy.pagemixer.servlet.ServletUtil) - enhance for composing "href" value of "base" tag - "Host" HTTP header value using OLD: you only can use ServletRequest#getServerName() value. NEW: you can choose from (1)"Host" HTTP header value, or (2) one gotten in old manner. Value is gotten in old manner, if "Host" HTTP header is not specified in current request context. - Servlet context root using OLD: you only can get URL corresponded to current requst context NEW: you can choose from (1)URL corresponded to Servlet context root, or (2)one gotten in old manner. URL gotten in (1) way allows you to specify web application local resource as relative to context root. - base URI - add #getBaseHref(ConsumerContext, boolean, boolean) This deprecates #getBaseHref(HttpServletRequest). - add #getHostName() method - SessionIDInsetFilter(NEW) (jp.ne.dti.lares.foozy.pagemixer.servlet.SessionIDInsetFilter) This provides function to append "session ID"(or your custom value) parameter: - into query string of "href" in "a" - as "hidden" just after "form" This allows you to implement CSRF(Cross Site Request Forgeries) detection easily. - SessionMethodKey(NEW) (jp.ne.dti.lares.foozy.pagemixer.servlet.SessionMethodKey) This allows you to get value from HttpSession specific method invocation. e.g.: session ID from HttpSession#getId() can be gotten by SessionMethodKey#ID - ActionInsetFilter (jp.ne.dti.lares.foozy.pagemixer.struts.ActionInsetFilter) - introduce some attributes Introduced attributes are shown below. - "external" - "module" - "nonaction" - "port" - "scheme" These attributes allow you to contorl insetting in HTML source side. - separate 'transaction' insetting from action URL insetting Now, ActionInsetFilter.FROM does not inset '' tag after target '