I have developed a skin customizer that I would like to contribute back to
Jetspeed. It is based off of the PSML customizer. I have attached a file
with the necessary patches to integrate the skin customizer as well as the
new templates and code that provide the functionality. This version uses a
freely available javascript color chooser from
http://www.mattkruse.com/javascript/. Feel free to replace it if you wish.
If you have any questions, please feel free to let me know.
Jeremy Ford
How to use:
1) Log in as admin
2) Go to the admin tab.
3) Choose skin browser
You will notice that you now have the options to add a new skin, update an
existing one, or delete an existing skin.
Adding a skin
1) Click on "Add Skin"
2) Enter a name for you skin
3) Choose colors using the javascript or enter your own
4) Click on "Add Skin".
5) You will be taken back to the skin browser and you should now see your
skin
Updating a skin
1) Choose a skin and click on "Update Skin"
2) Make modifications
3) Click on "Update Skin"
4) The skin browser should now reflect your changes
Deleting a skin
1) Choose a skin and click on "Delete Skin"
2) Confirm your decision
3) The skin will not be in the browser
Index: browser-skin.vm
===================================================================
RCS file:
/home/cvspublic/jakarta-jetspeed/webapp/WEB-INF/templates/vm/portlets/html/browser-skin.vm,v
retrieving revision 1.3
diff -u -r1.3 browser-skin.vm
--- browser-skin.vm 16 May 2002 11:56:05 -0000 1.3
+++ browser-skin.vm 11 Feb 2003 04:28:55 -0000
@@ -20,7 +20,10 @@
</tr>
</table>
</td>
- <td> </td>
+ <td align="center">
+ <a style="font-size:10"
+href="$jslink.setPaneByName("SkinForm").addQueryData("mode","update").addQueryData("skinname",
+ $!entry.Name)">Update Skin</a>
+ <a style="font-size:10"
+href="$jslink.setPaneByName("SkinForm").addQueryData("mode","delete").addQueryData("skinname",
+ $!entry.Name)">Delete Skin</a>
+ </td>
</tr>
#end
</table>
@@ -35,6 +38,11 @@
#if ($prev)
<input type="submit" value="Next > >">
#end
+ </td>
+ </tr>
+ <tr>
+ <td colspan=6 align="left">
+ <a style="font-size:10"
+href="$jslink.setPaneByName("SkinForm").addQueryData("mode","insert")">Add
+Skin</a>
</td>
</tr>
</table>
Index: default.psml
===================================================================
RCS file:
/home/cvspublic/jakarta-jetspeed/webapp/WEB-INF/psml/user/admin/html/default.psml,v
retrieving revision 1.18
diff -u -r1.18 default.psml
--- default.psml 12 Dec 2002 03:19:13 -0000 1.18
+++ default.psml 11 Feb 2003 04:29:33 -0000
@@ -78,5 +78,8 @@
<entry id='346' parent="PsmlForm">
<parameter name="_menustate" value="closed"/>
</entry>
+ <entry id='348' parent="SkinForm">
+ <parameter name="_menustate" value="closed"/>
+ </entry>
</portlets>
</portlets>
Index: admin.xreg
===================================================================
RCS file: /home/cvspublic/jakarta-jetspeed/webapp/WEB-INF/conf/admin.xreg,v
retrieving revision 1.31
diff -u -r1.31 admin.xreg
--- admin.xreg 16 Jan 2003 18:32:34 -0000 1.31
+++ admin.xreg 11 Feb 2003 04:30:08 -0000
@@ -457,6 +457,22 @@
<media-type ref="html"/>
<category>admin</category>
</portlet-entry>
-
+ <portlet-entry name="SkinForm" hidden="true" type="ref"
+ parent="CustomizerVelocity" application="false">
+ <security role="admin"/>
+ <security-ref parent="admin-only"/>
+ <meta-info>
+ <title>Portlet</title>
+ <description>Security Skin Maintenance for Jetspeed</description>
+ </meta-info>
+
+<classname>org.apache.jetspeed.portal.portlets.CustomizerVelocityPortlet</classname>
+ <parameter name="template" value="skin-form" hidden="true"
+ cachedOnName="true" cachedOnValue="true"/>
+ <parameter name="action" value="portlets.SkinUpdateAction"
+ hidden="true" cachedOnName="true" cachedOnValue="true"/>
+ <media-type ref="html"/>
+ <url cachedOnURL="true"/>
+ <category group="Jetspeed">admin</category>
+ </portlet-entry>
</registry>
Index: ColorPicker2-cc.js
===================================================================
RCS file: ColorPicker2-cc.js
diff -N ColorPicker2-cc.js
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ ColorPicker2-cc.js 11 Feb 2003 04:31:09 -0000
@@ -0,0 +1,70 @@
+// ===================================================================
+// Author: Matt Kruse <[EMAIL PROTECTED]>
+// WWW: http://www.mattkruse.com/
+//
+// NOTICE: You may use this code for any purpose, commercial or
+// private, without any further permission from the author. You may
+// remove this notice from your final code if you wish, however it is
+// appreciated by the author if at least my web site address is kept.
+//
+// You may *NOT* re-distribute this code in any way except through its
+// use. That means, you can include it in your product, or your web
+// site, or any other form where the code is actually being used. You
+// may not put the plain javascript up on your site for download or
+// include it in your javascript libraries for download.
+// If you wish to share this code with others, please just point them
+// to the URL instead.
+// Please DO NOT link directly to my .js files from your site. Copy
+// the files to your server and use them there. Thank you.
+// ===================================================================
+
+/* SOURCE FILE: AnchorPosition.js */
+function getAnchorPosition(anchorname){var useWindow=false;var coordinates=new
+Object();var x=0,y=0;var use_gebi=false, use_css=false,
+use_layers=false;if(document.getElementById){use_gebi=true;}else
+if(document.all){use_css=true;}else if(document.layers){use_layers=true;}if(use_gebi
+&&
+document.all){x=AnchorPosition_getPageOffsetLeft(document.all[anchorname]);y=AnchorPosition_getPageOffsetTop(document.all[anchorname]);}else
+ if(use_gebi){var
+o=document.getElementById(anchorname);x=AnchorPosition_getPageOffsetLeft(o);y=AnchorPosition_getPageOffsetTop(o);}else
+
+if(use_css){x=AnchorPosition_getPageOffsetLeft(document.all[anchorname]);y=AnchorPosition_getPageOffsetTop(document.all[anchorname]);}else
+ if(use_layers){var found=0;for(var
+i=0;i<document.anchors.length;i++){if(document.anchors[i].name==anchorname){found=1;break;}}if(found==0){coordinates.x=0;coordinates.y=0;return
+
+coordinates;}x=document.anchors[i].x;y=document.anchors[i].y;}else{coordinates.x=0;coordinates.y=0;return
+ coordinates;}coordinates.x=x;coordinates.y=y;return coordinates;}
+function getAnchorWindowPosition(anchorname){var
+coordinates=getAnchorPosition(anchorname);var x=0;var
+y=0;if(document.getElementById){if(isNaN(window.screenX)){x=coordinates.x-document.body.scrollLeft+window.screenLeft;y=coordinates.y-document.body.scrollTop+window.screenTop;}else{x=coordinates.x+window.screenX+(window.outerWidth-window.innerWidth)-window.pageXOffset;y=coordinates.y+window.screenY+(window.outerHeight-24-window.innerHeight)-window.pageYOffset;}}else
+
+if(document.all){x=coordinates.x-document.body.scrollLeft+window.screenLeft;y=coordinates.y-document.body.scrollTop+window.screenTop;}else
+
+if(document.layers){x=coordinates.x+window.screenX+(window.outerWidth-window.innerWidth)-window.pageXOffset;y=coordinates.y+window.screenY+(window.outerHeight-24-window.innerHeight)-window.pageYOffset;}coordinates.x=x;coordinates.y=y;return
+ coordinates;}
+function AnchorPosition_getPageOffsetLeft(el){var
+ol=el.offsetLeft;while((el=el.offsetParent) != null){ol += el.offsetLeft;}return ol;}
+function AnchorPosition_getWindowOffsetLeft(el){return
+AnchorPosition_getPageOffsetLeft(el)-document.body.scrollLeft;}
+function AnchorPosition_getPageOffsetTop(el){var
+ot=el.offsetTop;while((el=el.offsetParent) != null){ot += el.offsetTop;}return ot;}
+function AnchorPosition_getWindowOffsetTop(el){return
+AnchorPosition_getPageOffsetTop(el)-document.body.scrollTop;}
+
+/* SOURCE FILE: PopupWindow.js */
+function PopupWindow_getXYPosition(anchorname){var coordinates;if(this.type ==
+"WINDOW"){coordinates = getAnchorWindowPosition(anchorname);}else{coordinates =
+getAnchorPosition(anchorname);}this.x = coordinates.x;this.y = coordinates.y;}
+function PopupWindow_setSize(width,height){this.width = width;this.height = height;}
+function PopupWindow_populate(contents){this.contents = contents;this.populated =
+false;}
+function PopupWindow_refresh(){if(this.divName !=
+null){if(this.use_gebi){document.getElementById(this.divName).innerHTML =
+this.contents;}else if(this.use_css){document.all[this.divName].innerHTML =
+this.contents;}else if(this.use_layers){var d =
+document.layers[this.divName];d.document.open();d.document.writeln(this.contents);d.document.close();}}else{if(this.popupWindow
+ != null &&
+!this.popupWindow.closed){this.popupWindow.document.open();this.popupWindow.document.writeln(this.contents);this.popupWindow.document.close();this.popupWindow.focus();}}}
+function PopupWindow_showPopup(anchorname){this.getXYPosition(anchorname);this.x +=
+this.offsetX;this.y += this.offsetY;if(!this.populated &&(this.contents !=
+"")){this.populated = true;this.refresh();}if(this.divName !=
+null){if(this.use_gebi){document.getElementById(this.divName).style.left =
+this.x;document.getElementById(this.divName).style.top =
+this.y;document.getElementById(this.divName).style.visibility = "visible";}else
+if(this.use_css){document.all[this.divName].style.left =
+this.x;document.all[this.divName].style.top =
+this.y;document.all[this.divName].style.visibility = "visible";}else
+if(this.use_layers){document.layers[this.divName].left =
+this.x;document.layers[this.divName].top =
+this.y;document.layers[this.divName].visibility =
+"visible";}}else{if(this.popupWindow == null || this.popupWindow.closed){if(screen &&
+screen.availHeight){if((this.y + this.height) > screen.availHeight){this.y =
+screen.availHeight - this.height;}}if(screen && screen.availWidth){if((this.x +
+this.width) > screen.availWidth){this.x = screen.availWidth -
+this.width;}}this.popupWindow =
+window.open("about:blank","window_"+anchorname,"toolbar=no,location=no,status=no,menubar=no,scrollbars=auto,resizable,alwaysRaised,dependent,titlebar=no,width="+this.width+",height="+this.height+",screenX="+this.x+",left="+this.x+",screenY="+this.y+",top="+this.y+"");}this.refresh();}}
+function PopupWindow_hidePopup(){if(this.divName !=
+null){if(this.use_gebi){document.getElementById(this.divName).style.visibility =
+"hidden";}else if(this.use_css){document.all[this.divName].style.visibility =
+"hidden";}else if(this.use_layers){document.layers[this.divName].visibility =
+"hidden";}}else{if(this.popupWindow &&
+!this.popupWindow.closed){this.popupWindow.close();this.popupWindow = null;}}}
+function PopupWindow_isClicked(e){if(this.divName != null){if(this.use_layers){var
+clickX = e.pageX;var clickY = e.pageY;var t =
+document.layers[this.divName];if((clickX > t.left) &&(clickX < t.left+t.clip.width)
+&&(clickY > t.top) &&(clickY < t.top+t.clip.height)){return true;}else{return
+false;}}else if(document.all){var t = window.event.srcElement;while(t.parentElement
+!= null){if(t.id==this.divName){return true;}t = t.parentElement;}return false;}else
+if(this.use_gebi){var t = e.originalTarget;while(t.parentNode !=
+null){if(t.id==this.divName){return true;}t = t.parentNode;}return false;}return
+false;}return false;}
+function PopupWindow_hideIfNotClicked(e){if(this.autoHideEnabled &&
+!this.isClicked(e)){this.hidePopup();}}
+function PopupWindow_autoHide(){this.autoHideEnabled = true;}
+function PopupWindow_hidePopupWindows(e){for(var
+i=0;i<popupWindowObjects.length;i++){if(popupWindowObjects[i] != null){var p =
+popupWindowObjects[i];p.hideIfNotClicked(e);}}}
+function
+PopupWindow_attachListener(){if(document.layers){document.captureEvents(Event.MOUSEUP);}window.popupWindowOldEventListener
+ = document.onmouseup;if(window.popupWindowOldEventListener !=
+null){document.onmouseup = new
+Function("window.popupWindowOldEventListener();PopupWindow_hidePopupWindows();");}else{document.onmouseup
+ = PopupWindow_hidePopupWindows;}}
+function PopupWindow(){if(!window.popupWindowIndex){window.popupWindowIndex =
+0;}if(!window.popupWindowObjects){window.popupWindowObjects = new
+Array();}if(!window.listenerAttached){window.listenerAttached =
+true;PopupWindow_attachListener();}this.index =
+popupWindowIndex++;popupWindowObjects[this.index] = this;this.divName =
+null;this.popupWindow = null;this.width=0;this.height=0;this.populated =
+false;this.visible = false;this.autoHideEnabled = false;this.contents =
+"";if(arguments.length>0){this.type="DIV";this.divName =
+arguments[0];}else{this.type="WINDOW";}this.use_gebi = false;this.use_css =
+false;this.use_layers = false;if(document.getElementById){this.use_gebi = true;}else
+if(document.all){this.use_css = true;}else if(document.layers){this.use_layers =
+true;}else{this.type = "WINDOW";}this.offsetX = 0;this.offsetY = 0;this.getXYPosition
+= PopupWindow_getXYPosition;this.populate = PopupWindow_populate;this.refresh =
+PopupWindow_refresh;this.showPopup = PopupWindow_showPopup;this.hidePopup =
+PopupWindow_hidePopup;this.setSize = PopupWindow_setSize;this.isClicked =
+PopupWindow_isClicked;this.autoHide = PopupWindow_autoHide;this.hideIfNotClicked =
+PopupWindow_hideIfNotClicked;}
+
+
+/* SOURCE FILE: ColorPicker2.js */
+
+function ColorPicker_writeDiv(){document.writeln("<DIV ID=\"colorPickerDiv\"
+STYLE=\"position:absolute;visibility:hidden;\"> </DIV>");}
+function ColorPicker_show(anchorname){this.showPopup(anchorname);}
+function
+ColorPicker_pickColor(color,obj){obj.hidePopup();if(window.pickColor){pickColor(color);}else{alert("You
+ must define a function named 'pickColor' to receive the value clicked!");}}
+function ColorPicker_highlightColor(c){var thedoc
+=(arguments.length>1)?arguments[1]:window.document;var d =
+thedoc.getElementById("colorPickerSelectedColor");d.style.backgroundColor = c;d =
+thedoc.getElementById("colorPickerSelectedColorValue");d.innerHTML = c;}
+function ColorPicker(){var windowMode = false;if(arguments.length==0){var divname =
+"colorPickerDiv";}else if(arguments[0] == "window"){var divname = '';windowMode =
+true;}else{var divname = arguments[0];}if(divname != ""){var cp = new
+PopupWindow(divname);}else{var cp = new
+PopupWindow();cp.setSize(250,225);}cp.currentValue = "#FFFFFF";cp.writeDiv =
+ColorPicker_writeDiv;cp.highlightColor = ColorPicker_highlightColor;cp.show =
+ColorPicker_show;var colors = new
+Array("#000000","#000033","#000066","#000099","#0000CC","#0000FF","#330000","#330033","#330066","#330099","#3300CC",
+"#3300FF","#660000","#660033","#660066","#660099","#6600CC","#6600FF","#990000","#990033","#990066","#990099",
+"#9900CC","#9900FF","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#FF0000","#FF0033","#FF0066",
+"#FF0099","#FF00CC","#FF00FF","#003300","#003333","#003366","#003399","#0033CC","#0033FF","#333300","#333333",
+"#333366","#333399","#3333CC","#3333FF","#663300","#663333","#663366","#663399","#6633CC","#6633FF","#993300",
+"#993333","#993366","#993399","#9933CC","#9933FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF",
+"#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#006600","#006633","#006666","#006699","#0066CC",
+"#0066FF","#336600","#336633","#336666","#336699","#3366CC","#3366FF","#666600","#666633","#666666","#666699",
+"#6666CC","#6666FF","#996600","#996633","#996666","#996699","#9966CC","#9966FF","#CC6600","#CC6633","#CC6666",
+"#CC6699","#CC66CC","#CC66FF","#FF6600","#FF6633","#FF6666","#FF6699","#FF66CC","#FF66FF","#009900","#009933",
+"#009966","#009999","#0099CC","#0099FF","#339900","#339933","#339966","#339999","#3399CC","#3399FF","#669900",
+"#669933","#669966","#669999","#6699CC","#6699FF","#999900","#999933","#999966","#999999","#9999CC","#9999FF",
+"#CC9900","#CC9933","#CC9966","#CC9999","#CC99CC","#CC99FF","#FF9900","#FF9933","#FF9966","#FF9999","#FF99CC",
+"#FF99FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#33CC00","#33CC33","#33CC66","#33CC99",
+"#33CCCC","#33CCFF","#66CC00","#66CC33","#66CC66","#66CC99","#66CCCC","#66CCFF","#99CC00","#99CC33","#99CC66",
+"#99CC99","#99CCCC","#99CCFF","#CCCC00","#CCCC33","#CCCC66","#CCCC99","#CCCCCC","#CCCCFF","#FFCC00","#FFCC33",
+"#FFCC66","#FFCC99","#FFCCCC","#FFCCFF","#00FF00","#00FF33","#00FF66","#00FF99","#00FFCC","#00FFFF","#33FF00",
+"#33FF33","#33FF66","#33FF99","#33FFCC","#33FFFF","#66FF00","#66FF33","#66FF66","#66FF99","#66FFCC","#66FFFF",
+"#99FF00","#99FF33","#99FF66","#99FF99","#99FFCC","#99FFFF","#CCFF00","#CCFF33","#CCFF66","#CCFF99","#CCFFCC",
+"#CCFFFF","#FFFF00","#FFFF33","#FFFF66","#FFFF99","#FFFFCC","#FFFFFF");var total =
+colors.length;var width = 18;var cp_contents = "";var windowRef
+=(windowMode)?"window.opener.":"";if(windowMode){cp_contents +=
+"<HTML><HEAD><TITLE>Select Color</TITLE></HEAD>";cp_contents += "<BODY MARGINWIDTH=0
+MARGINHEIGHT=0 LEFMARGIN=0 TOPMARGIN=0><CENTER>";}cp_contents += "<TABLE BORDER=1
+CELLSPACING=1 CELLPADDING=0>";var use_highlight =(document.getElementById ||
+document.all)?true:false;for(var i=0;i<total;i++){if((i % width) == 0){cp_contents +=
+"<TR>";}if(use_highlight){var mo =
+'onMouseOver="'+windowRef+'ColorPicker_highlightColor(\''+colors[i]+'\',window.document)"';}else{mo
+ = "";}cp_contents += '<TD BGCOLOR="'+colors[i]+'"><FONT SIZE="-3"><A HREF="#"
+onClick="'+windowRef+'ColorPicker_pickColor(\''+colors[i]+'\','+windowRef+'window.popupWindowObjects['+cp.index+']);return
+ false;" '+mo+' STYLE="text-decoration:none;"> </A></FONT></TD>';if(
+((i+1)>=total) ||(((i+1) % width) == 0)){cp_contents +=
+"</TR>";}}if(document.getElementById){var width1 = Math.floor(width/2);var width2 =
+width = width1;cp_contents += "<TR><TD COLSPAN='"+width1+"' BGCOLOR='#ffffff'
+ID='colorPickerSelectedColor'> </TD><TD COLSPAN='"+width2+"' ALIGN='CENTER'
+ID='colorPickerSelectedColorValue'>#FFFFFF</TD></TR>";}cp_contents +=
+"</TABLE>";if(windowMode){cp_contents +=
+"</CENTER></BODY></HTML>";}cp.populate(cp_contents+"\n");cp.offsetY =
+25;cp.autoHide();return cp;}
+
Index: skin-form.vm
===================================================================
RCS file: skin-form.vm
diff -N skin-form.vm
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ skin-form.vm 12 Feb 2003 00:55:12 -0000
@@ -0,0 +1,350 @@
+<SCRIPT LANGUAGE="Javascript"
+SRC="$clink.setURI("javascript/ColorPicker2-cc.js")"></SCRIPT>
+<SCRIPT LANGUAGE="JavaScript">
+<!--
+var cp = new ColorPicker('window');
+//var cp2 = new ColorPicker();
+// Runs when a color is clicked
+function pickColor(color) {
+ field.value = color;
+}
+
+var field;
+function showColorChooser(anchorname, anchorid) {
+ field = document.forms["SkinForm"][anchorname];
+ cp.show(anchorid);
+}
+-->
+</SCRIPT>
+
+
+<form name="SkinForm" method="post"
+action="$jslink.getPaneByName("SkinBrowser").setAction("portlets.SkinUpdateAction")">
+
+<table bgcolor="#ffffff" cellpadding="5">
+ #if ($msg)
+ <tr>
+ <td colspan="2">
+ <table bgcolor="#ffffff">
+ <tr>
+ <td>
+ $msg
+ </td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ #end
+
+ #if (($mode == "delete"))
+ <tr>
+ <td colspan="2">Are you sure you want do delete this skin?</td>
+ </tr>
+ <tr>
+ #formReadOnlyCell ("Name" "Name" $!entry.Name)
+ <input type="hidden" name="skinname" value="$!entry.Name"/>
+ </tr>
+ #elseif ($mode == "insert")
+
+ <tr>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <b><font face="$ui.sansSerifFonts">Name</font></b>
+ </td>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <font face="$ui.sansSerifFonts">
+ <input type="text" size="30" name="skinname"
+value="$!data.user.getTemp("skinname")">
+ </font>
+ </td>
+ </tr>
+ <tr>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <b><font face="$ui.sansSerifFonts">text-color</font></b>
+ </td>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <font face="$ui.sansSerifFonts">
+ <input type="text" name="parameter.text-color" size="20"
+value="$!data.user.getTemp("parameter.text-color")"> <a href="#"
+onClick="showColorChooser('parameter.text-color', 'text_color'); return false;"
+id="text_color">Pick</a>
+ </font>
+ </td>
+ </tr>
+
+ <tr>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <b><font face="$ui.sansSerifFonts">background-color</font></b>
+ </td>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <font face="$ui.sansSerifFonts">
+ <input type="text" name="parameter.background-color" size="20"
+value="$!data.user.getTemp("parameter.background-color")"> <a href="#"
+onClick="showColorChooser('parameter.background-color', 'background_color'); return
+false;" id="background_color">Pick</a>
+ </font>
+ </td>
+ </tr>
+ <tr>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <b><font face="$ui.sansSerifFonts">title-text-color</font></b>
+ </td>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <font face="$ui.sansSerifFonts">
+ <input type="text" name="parameter.title-text-color" size="20"
+value="$!data.user.getTemp("parameter.title-text-color")"> <a href="#"
+onClick="showColorChooser('parameter.title-text-color', 'title_text_color'); return
+false;" id="title_text_color">Pick</a>
+ </font>
+ </td>
+ </tr>
+ <tr>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <b><font face="$ui.sansSerifFonts">title-background-color</font></b>
+ </td>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <font face="$ui.sansSerifFonts">
+ <input type="text" name="parameter.title-background-color" size="20"
+value="$!data.user.getTemp("parameter.title-background-color")"> <a href="#"
+onClick="showColorChooser('parameter.title-background-color','title_background_color');
+ return false;" id="title_background_color">Pick</a>
+ </font>
+ </td>
+ </tr>
+ <tr>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <b><font face="$ui.sansSerifFonts">highlight-text-color</font></b>
+ </td>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <font face="$ui.sansSerifFonts">
+ <input type="text" name="parameter.highlight-text-color" size="20"
+value="$!data.user.getTemp("parameter.highlight-text-color")"> <a href="#"
+onClick="showColorChooser('parameter.highlight-text-color','highlight_text_color');
+return false;" id="highlight_text_color">Pick</a>
+ </font>
+ </td>
+ </tr>
+ <tr>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <b><font face="$ui.sansSerifFonts">highlight-background-color</font></b>
+ </td>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <font face="$ui.sansSerifFonts">
+ <input type="text" name="parameter.highlight-background-color"
+size="20" value="$!data.user.getTemp("parameter.highlight-background-color")"> <a
+href="#"
+onClick="showColorChooser('parameter.highlight-background-color','highlight_background_color');
+ return false;" id="highlight_background_color">Pick</a>
+ </font>
+ </td>
+ </tr>
+
+ <tr>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <b><font face="$ui.sansSerifFonts">portlet-style-class</font></b>
+ </td>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <font face="$ui.sansSerifFonts">
+ <input type="text" name="parameter.portlet-style-class" size="20"
+value="$!data.user.getTemp("parameter.portlet-style-class")">
+ </font>
+ </td>
+ </tr>
+
+ <tr>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <b><font face="$ui.sansSerifFonts">title-style-class</font></b>
+ </td>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <font face="$ui.sansSerifFonts">
+ <input type="text" name="parameter.title-style-class" size="20"
+value="$!data.user.getTemp("parameter.title-style-class")">
+ </font>
+ </td>
+ </tr>
+ <tr>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <b><font face="$ui.sansSerifFonts">content-style-class</font></b>
+ </td>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <font face="$ui.sansSerifFonts">
+ <input type="text" name="parameter.content-style-class" size="20"
+value="$!data.user.getTemp("parameter.content-style-class")">
+ </font>
+ </td>
+ </tr>
+ <tr>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <b><font face="$ui.sansSerifFonts">highlight-title-style-class</font></b>
+ </td>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <font face="$ui.sansSerifFonts">
+ <input type="text" name="parameter.highlight-title-style-class"
+size="20" value="$!data.user.getTemp("parameter.highlight-title-style-class")">
+ </font>
+ </td>
+ </tr>
+ <tr>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <b><font face="$ui.sansSerifFonts">tab-style-class</font></b>
+ </td>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <font face="$ui.sansSerifFonts">
+ <input type="text" name="parameter.tab-style-class" size="20"
+value="$!data.user.getTemp("parameter.tab-style-class")">
+ </font>
+ </td>
+ </tr>
+ <tr>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <b><font face="$ui.sansSerifFonts">tab-title-style-class</font></b>
+ </td>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <font face="$ui.sansSerifFonts">
+ <input type="text" name="parameter.tab-title-style-class" size="20"
+value="$!data.user.getTemp("parameter.tab-title-style-class")">
+ </font>
+ </td>
+ </tr>
+ <tr>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <b><font face="$ui.sansSerifFonts">tab-content-style-class</font></b>
+ </td>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <font face="$ui.sansSerifFonts">
+ <input type="text" name="parameter.tab-content-style-class" size="20"
+value="$!data.user.getTemp("parameter.tab-content-style-class")">
+ </font>
+ </td>
+ </tr>
+ #elseif($mode == "update")
+ <tr>
+ #formReadOnlyCell ("Name" "Name" $!entry.Name)
+ <input type="hidden" name="skinname" value="$!entry.Name"/>
+ </tr>
+ <tr>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <b><font face="$ui.sansSerifFonts">text-color</font></b>
+ </td>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <font face="$ui.sansSerifFonts">
+ <input type="text" name="parameter.text-color" size="20"
+value="$!entry.getParameter("text-color").value"> <a href="#"
+onClick="showColorChooser('parameter.text-color', 'text_color'); return false;"
+id="text_color">Pick</a>
+ </font>
+ </td>
+ </tr>
+
+ <tr>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <b><font face="$ui.sansSerifFonts">background-color</font></b>
+ </td>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <font face="$ui.sansSerifFonts">
+ <input type="text" name="parameter.background-color" size="20"
+value="$!entry.getParameter("background-color").value"> <a href="#"
+onClick="showColorChooser('parameter.background-color', 'background_color'); return
+false;" id="background_color">Pick</a>
+ </font>
+ </td>
+ </tr>
+ <tr>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <b><font face="$ui.sansSerifFonts">title-text-color</font></b>
+ </td>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <font face="$ui.sansSerifFonts">
+ <input type="text" name="parameter.title-text-color" size="20"
+value="$!entry.getParameter("title-text-color").value"> <a href="#"
+onClick="showColorChooser('parameter.title-text-color', 'title_text_color'); return
+false;" id="title_text_color">Pick</a>
+ </font>
+ </td>
+ </tr>
+ <tr>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <b><font face="$ui.sansSerifFonts">title-background-color</font></b>
+ </td>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <font face="$ui.sansSerifFonts">
+ <input type="text" name="parameter.title-background-color" size="20"
+value="$!entry.getParameter("title-background-color").value"> <a href="#"
+onClick="showColorChooser('parameter.title-background-color','title_background_color');
+ return false;" id="title_background_color">Pick</a>
+ </font>
+ </td>
+ </tr>
+ <tr>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <b><font face="$ui.sansSerifFonts">highlight-text-color</font></b>
+ </td>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <font face="$ui.sansSerifFonts">
+ <input type="text" name="parameter.highlight-text-color" size="20"
+value="$!entry.getParameter("highlight-text-color").value"> <a href="#"
+onClick="showColorChooser('parameter.highlight-text-color','highlight_text_color');
+return false;" id="highlight_text_color">Pick</a>
+ </font>
+ </td>
+ </tr>
+ <tr>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <b><font face="$ui.sansSerifFonts">highlight-background-color</font></b>
+ </td>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <font face="$ui.sansSerifFonts">
+ <input type="text" name="parameter.highlight-background-color"
+size="20" value="$!entry.getParameter("highlight-background-color").value"> <a
+href="#"
+onClick="showColorChooser('parameter.highlight-background-color','highlight_background_color');
+ return false;" id="highlight_background_color">Pick</a>
+ </font>
+ </td>
+ </tr>
+
+ <tr>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <b><font face="$ui.sansSerifFonts">portlet-style-class</font></b>
+ </td>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <font face="$ui.sansSerifFonts">
+ <input type="text" name="parameter.portlet-style-class" size="20"
+value="$!entry.getParameter("portlet-style-class").value">
+ </font>
+ </td>
+ </tr>
+
+ <tr>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <b><font face="$ui.sansSerifFonts">title-style-class</font></b>
+ </td>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <font face="$ui.sansSerifFonts">
+ <input type="text" name="parameter.title-style-class" size="20"
+value="$!entry.getParameter("title-style-class").value">
+ </font>
+ </td>
+ </tr>
+ <tr>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <b><font face="$ui.sansSerifFonts">content-style-class</font></b>
+ </td>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <font face="$ui.sansSerifFonts">
+ <input type="text" name="parameter.content-style-class" size="20"
+value="$!entry.getParameter("content-style-class").value">
+ </font>
+ </td>
+ </tr>
+ <tr>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <b><font face="$ui.sansSerifFonts">highlight-title-style-class</font></b>
+ </td>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <font face="$ui.sansSerifFonts">
+ <input type="text" name="parameter.highlight-title-style-class"
+size="20" value="$!entry.getParameter("highlight-title-style-class").value">
+ </font>
+ </td>
+ </tr>
+ <tr>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <b><font face="$ui.sansSerifFonts">tab-style-class</font></b>
+ </td>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <font face="$ui.sansSerifFonts">
+ <input type="text" name="parameter.tab-style-class" size="20"
+value="$!entry.getParameter("tab-style-class").value">
+ </font>
+ </td>
+ </tr>
+ <tr>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <b><font face="$ui.sansSerifFonts">tab-title-style-class</font></b>
+ </td>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <font face="$ui.sansSerifFonts">
+ <input type="text" name="parameter.tab-title-style-class" size="20"
+value="$!entry.getParameter("tab-title-style-class").value">
+ </font>
+ </td>
+ </tr>
+ <tr>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <b><font face="$ui.sansSerifFonts">tab-content-style-class</font></b>
+ </td>
+ <td bgcolor="$!{skin.TitleBackgroundColor}">
+ <font face="$ui.sansSerifFonts">
+ <input type="text" name="parameter.tab-content-style-class" size="20"
+value="$!entry.getParameter("tab-content-style-class").value">
+ </font>
+ </td>
+ </tr>
+
+
+ #end
+</table>
+<table border="0" cellspacing="0" cellpadding="5" width="30%">
+ <tr>
+ <td>
+ #if ($mode == "insert")
+ <input type="submit" name="eventSubmit_doInsert" value="Add Skin"/>
+ #elseif ($mode == "delete")
+ <input type="submit" name="eventSubmit_doDelete" value="Delete Skin"/>
+ #elseif ($mode == "update")
+ <input type="submit" name="eventSubmit_doUpdate" value="Update Skin"/>
+ #end
+ </td>
+ <td>
+ <input type="submit" name="eventSubmit_doCancel" value="Cancel"/>
+ </td>
+ </tr>
+</table>
+</form>
+
+<SCRIPT LANGUAGE="JavaScript">cp.writeDiv()</SCRIPT>
+
Index: SkinUpdateAction.java
===================================================================
RCS file: SkinUpdateAction.java
diff -N SkinUpdateAction.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ SkinUpdateAction.java 12 Feb 2003 01:15:11 -0000
@@ -0,0 +1,430 @@
+/* ====================================================================
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2000-2001 The Apache Software Foundation. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ * if any, must include the following acknowledgment:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself,
+ * if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Apache" and "Apache Software Foundation" and
+ * "Apache Jetspeed" must not be used to endorse or promote products
+ * derived from this software without prior written permission. For
+ * written permission, please contact [EMAIL PROTECTED]
+ *
+ * 5. Products derived from this software may not be called "Apache" or
+ * "Apache Jetspeed", nor may "Apache" appear in their name, without
+ * prior written permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ */
+
+package org.apache.jetspeed.modules.actions.portlets;
+
+import java.util.Iterator;
+import java.util.Map;
+
+import org.apache.jetspeed.modules.actions.portlets.security.SecurityConstants;
+import org.apache.jetspeed.om.registry.SkinEntry;
+import org.apache.jetspeed.om.registry.base.BaseSkinEntry;
+import org.apache.jetspeed.portal.portlets.VelocityPortlet;
+import org.apache.jetspeed.services.Registry;
+import org.apache.jetspeed.util.template.JetspeedLink;
+import org.apache.jetspeed.util.template.JetspeedLinkFactory;
+import org.apache.turbine.util.DynamicURI;
+import org.apache.turbine.util.Log;
+import org.apache.turbine.util.RunData;
+import org.apache.turbine.util.security.EntityExistsException;
+import org.apache.velocity.context.Context;
+
+/**
+ * This action enables to update the skin entries
+ *
+ * @author <a href="mailto:[EMAIL PROTECTED]">Jeremy Ford</a>
+ * @version $Id: SkinUpdateAction.java,v Exp $
+ */
+public class SkinUpdateAction extends VelocityPortletAction
+{
+
+ private static final String PARAMETER = "parameter.";
+ private static final String SKIN_UPDATE_PANE = "SkinForm";
+
+ /**
+ * Subclasses must override this method to provide default behavior
+ * for the portlet action
+ */
+ /**
+ * Build the normal state content for this portlet.
+ *
+ * @param portlet The velocity-based portlet that is being built.
+ * @param context The velocity context for this request.
+ * @param rundata The turbine rundata context for this request.
+ */
+ protected void buildNormalContext(
+ VelocityPortlet portlet,
+ Context context,
+ RunData rundata)
+ throws Exception
+ {
+
+ String mode =
+ rundata.getParameters().getString(SecurityConstants.PARAM_MODE);
+ context.put(SecurityConstants.PARAM_MODE, mode);
+
+ String msgid =
+ rundata.getParameters().getString(SecurityConstants.PARAM_MSGID);
+ if (msgid != null)
+ {
+ int id = Integer.parseInt(msgid);
+ if (id < SecurityConstants.MESSAGES.length)
+ {
+ context.put(
+ SecurityConstants.PARAM_MSG,
+ SecurityConstants.MESSAGES[id]);
+ }
+ }
+
+ if (mode != null
+ && (mode.equals(SecurityConstants.PARAM_MODE_DELETE)
+ || mode.equals(SecurityConstants.PARAM_MODE_UPDATE)))
+ {
+ String skinName = rundata.getParameters().getString("skinname");
+ SkinEntry skinEntry =
+ (SkinEntry) Registry.getEntry(Registry.SKIN, skinName);
+ context.put("entry", skinEntry);
+ }
+ }
+
+ /**
+ * Insert a skin entry into the registry
+ * @param rundata The turbine rundata context for this request.
+ * @param context The velocity context for this request.
+ * @throws Exception
+ */
+ public void doInsert(RunData rundata, Context context) throws Exception
+ {
+ try
+ {
+ String skinName = rundata.getParameters().getString("skinname");
+
+ if (skinName == null || skinName.length() == 0)
+ {
+ JetspeedLink link = JetspeedLinkFactory.getInstance(rundata);
+ DynamicURI duri =
+ link
+ .getPaneByName(SKIN_UPDATE_PANE)
+ .addPathInfo(
+ SecurityConstants.PARAM_MODE,
+ SecurityConstants.PARAM_MODE_INSERT)
+ .addPathInfo(
+ SecurityConstants.PARAM_MSGID,
+ SecurityConstants.MID_INVALID_ENTITY_NAME);
+ JetspeedLinkFactory.putInstance(link);
+ rundata.setRedirectURI(duri.toString());
+
+ resetForm(rundata);
+ }
+ else
+ {
+ //check if profile to be created already exists
+ SkinEntry existingSkinEntry =
+ (SkinEntry) Registry.getEntry(Registry.SKIN, skinName);
+ if (existingSkinEntry != null)
+ {
+ throw new EntityExistsException(
+ "SkinEntry: " + skinName + " Already Exists!");
+ }
+
+ BaseSkinEntry skinEntry = new BaseSkinEntry();
+ skinEntry.setName(skinName);
+
+ addParameters(rundata, skinEntry);
+
+ Registry.addEntry(Registry.SKIN, skinEntry);
+
+ clearUserData(rundata);
+ }
+ }
+ catch (EntityExistsException e)
+ {
+ //
+ // dup key found - display error message - bring back to same screen
+ //
+ JetspeedLink link = JetspeedLinkFactory.getInstance(rundata);
+ DynamicURI duri =
+ link
+ .getPaneByName(SKIN_UPDATE_PANE)
+ .addPathInfo(
+ SecurityConstants.PARAM_MODE,
+ SecurityConstants.PARAM_MODE_INSERT)
+ .addPathInfo(
+ SecurityConstants.PARAM_MSGID,
+ SecurityConstants.MID_ENTITY_ALREADY_EXISTS);
+ JetspeedLinkFactory.putInstance(link);
+ rundata.setRedirectURI(duri.toString());
+
+ resetForm(rundata);
+ }
+ catch (Exception e)
+ {
+ JetspeedLink link = JetspeedLinkFactory.getInstance(rundata);
+ DynamicURI duri =
+ link
+ .getPaneByName(SKIN_UPDATE_PANE)
+ .addPathInfo(
+ SecurityConstants.PARAM_MODE,
+ SecurityConstants.PARAM_MODE_INSERT)
+ .addPathInfo(
+ SecurityConstants.PARAM_MSGID,
+ SecurityConstants.MID_UPDATE_FAILED);
+ JetspeedLinkFactory.putInstance(link);
+ rundata.setRedirectURI(duri.toString());
+
+ resetForm(rundata);
+ }
+ }
+
+ /**
+ * Update a skin entry that is in the registry
+ * @param rundata The turbine rundata context for this request.
+ * @param context The velocity context for this request.
+ * @throws Exception
+ */
+ public void doUpdate(RunData rundata, Context context) throws Exception
+ {
+ try
+ {
+ String skinName = rundata.getParameters().getString("skinname");
+
+ if (skinName == null || skinName.length() == 0)
+ {
+ JetspeedLink link = JetspeedLinkFactory.getInstance(rundata);
+ DynamicURI duri =
+ link
+ .getPaneByName(SKIN_UPDATE_PANE)
+ .addPathInfo(
+ SecurityConstants.PARAM_MODE,
+ SecurityConstants.PARAM_MODE_UPDATE)
+ .addPathInfo(
+ SecurityConstants.PARAM_MSGID,
+ SecurityConstants.MID_INVALID_ENTITY_NAME);
+
+ JetspeedLinkFactory.putInstance(link);
+ rundata.setRedirectURI(duri.toString());
+
+ resetForm(rundata);
+
+ clearUserData(rundata);
+ }
+ else
+ {
+ SkinEntry skinEntry =
+ (SkinEntry) Registry.getEntry(Registry.SKIN, skinName);
+
+ skinEntry.getParameterMap().clear();
+
+ addParameters(rundata, skinEntry);
+ }
+ }
+ catch (Exception e)
+ {
+ JetspeedLink link = JetspeedLinkFactory.getInstance(rundata);
+ DynamicURI duri =
+ link
+ .getPaneByName(SKIN_UPDATE_PANE)
+ .addPathInfo(
+ SecurityConstants.PARAM_MODE,
+ SecurityConstants.PARAM_MODE_UPDATE)
+ .addPathInfo(
+ SecurityConstants.PARAM_MSGID,
+ SecurityConstants.MID_UPDATE_FAILED);
+ JetspeedLinkFactory.putInstance(link);
+ rundata.setRedirectURI(duri.toString());
+
+ resetForm(rundata);
+ }
+ }
+
+ /**
+ * Delete a skin entry from the registry
+ * @param rundata The turbine rundata context for this request.
+ * @param context The velocity context for this request.
+ * @throws Exception
+ */
+ public void doDelete(RunData rundata, Context context) throws Exception
+ {
+ try
+ {
+ String skinName = rundata.getParameters().getString("skinname");
+
+ if (skinName == null || skinName.length() == 0)
+ {
+ JetspeedLink link = JetspeedLinkFactory.getInstance(rundata);
+ DynamicURI duri =
+ link
+ .getPaneByName(SKIN_UPDATE_PANE)
+ .addPathInfo(
+ SecurityConstants.PARAM_MODE,
+ SecurityConstants.PARAM_MODE_DELETE)
+ .addPathInfo(
+ SecurityConstants.PARAM_MSGID,
+ SecurityConstants.MID_INVALID_ENTITY_NAME);
+ JetspeedLinkFactory.putInstance(link);
+ rundata.setRedirectURI(duri.toString());
+
+ }
+ else
+ {
+ Registry.removeEntry(Registry.SKIN, skinName);
+
+ clearUserData(rundata);
+ }
+ }
+ catch (Exception e)
+ {
+ JetspeedLink link = JetspeedLinkFactory.getInstance(rundata);
+ DynamicURI duri =
+ link
+ .getPaneByName(SKIN_UPDATE_PANE)
+ .addPathInfo(
+ SecurityConstants.PARAM_MODE,
+ SecurityConstants.PARAM_MODE_DELETE)
+ .addPathInfo(
+ SecurityConstants.PARAM_MSGID,
+ SecurityConstants.MID_DELETE_FAILED);
+ JetspeedLinkFactory.putInstance(link);
+ rundata.setRedirectURI(duri.toString());
+ }
+ }
+
+ public void doCancel(RunData rundata, Context context) throws Exception
+ {
+ clearUserData(rundata);
+ }
+
+ /**
+ * Populates the user's temp storage with form data
+ * @param rundata The turbine rundata context for this request.
+ */
+ private void resetForm(RunData rundata)
+ {
+ Object[] keys = rundata.getParameters().getKeys();
+ if (keys != null)
+ {
+ for (int i = 0; i < keys.length; i++)
+ {
+ String key = (String) keys[i];
+
+ if (key.startsWith(PARAMETER))
+ {
+ String parameterValue =
+ rundata.getParameters().getString(key);
+
+ if (parameterValue != null && parameterValue.length() > 0)
+ {
+ rundata.getUser().setTemp(key, parameterValue);
+ }
+ }
+ }
+ }
+
+ String skinName = rundata.getParameters().getString("skinname");
+ rundata.getUser().setTemp("skinname", skinName);
+ }
+
+ /**
+ * Adds parameters to a skin entry
+ * @param rundata The turbine rundata context for this request.
+ * @param skinEntry
+ */
+ private void addParameters(RunData rundata, SkinEntry skinEntry)
+ {
+ Object[] keys = rundata.getParameters().getKeys();
+ if (keys != null)
+ {
+ for (int i = 0; i < keys.length; i++)
+ {
+ String key = (String) keys[i];
+
+ if (key.startsWith(PARAMETER))
+ {
+ String parameterValue =
+ rundata.getParameters().getString(key);
+
+ if (parameterValue != null && parameterValue.length() > 0)
+ {
+ String parameterName =
+ key.substring(PARAMETER.length());
+ skinEntry.addParameter(parameterName, parameterValue);
+ }
+ }
+ }
+ }
+ }
+
+ private void clearUserData(RunData rundata)
+ {
+ try
+ {
+ Map tempStorage = rundata.getUser().getTempStorage();
+ tempStorage.remove("skinname");
+
+ if (tempStorage != null)
+ {
+ Iterator keyIter = tempStorage.keySet().iterator();
+ while (keyIter.hasNext())
+ {
+ Object keyObj = keyIter.next();
+ if (keyObj instanceof String)
+ {
+ String key = (String) keyObj;
+ if (key.startsWith(PARAMETER))
+ {
+ keyIter.remove();
+ }
+ }
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ if (Log.getLogger().isDebugEnabled())
+ {
+ Log.debug("SkinUpdateAction: Failed to clear user data");
+ }
+ }
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]