Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/adapters/jquery.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/_bootstrap.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/ckeditor.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/ckeditor_base.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/ckeditor_basic.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/command.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/commanddefinition.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/config.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/dataprocessor.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/dom.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/dom/comment.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/dom/document.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/dom/documentfragment.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/dom/domobject.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/dom/element.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/dom/elementpath.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/dom/event.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/dom/node.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/dom/nodelist.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/dom/range.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/dom/rangelist.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/dom/text.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/dom/walker.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/dom/window.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/dtd.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/editor.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/editor_basic.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/env.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/event.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/eventInfo.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/focusmanager.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/htmlparser.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/htmlparser/basicwriter.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/htmlparser/cdata.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/htmlparser/comment.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/htmlparser/element.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/htmlparser/filter.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/htmlparser/fragment.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/htmlparser/text.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/lang.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/loader.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/plugindefinition.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/plugins.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/resourcemanager.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/scriptloader.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/skins.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/themes.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/tools.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/core/ui.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/_languages.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/_translationstatus.txt'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/af.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/ar.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/bg.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/bn.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/bs.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/ca.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/cs.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/cy.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/da.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/de.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/el.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/en-au.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/en-ca.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/en-gb.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/en.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/eo.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/es.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/et.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/eu.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/fa.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/fi.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/fo.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/fr-ca.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/fr.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/gl.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/gu.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/he.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/hi.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/hr.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/hu.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/is.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/it.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/ja.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/ka.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/km.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/ko.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/lt.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/lv.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/mn.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/ms.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/nb.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/nl.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/no.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/pl.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/pt-br.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/pt.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/ro.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/ru.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/sk.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/sl.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/sr-latn.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/sr.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/sv.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/th.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/tr.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/uk.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/vi.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/zh-cn.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/lang/zh.js'. Fisheye: No comparison available. Pass `N' to diff? Index: 3rdParty_sources/ckeditor/net/fckeditor/FCKeditor.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/FCKeditor.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/FCKeditor.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,418 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor; + +import javax.servlet.http.HttpServletRequest; + +import net.fckeditor.handlers.PropertiesLoader; +import net.fckeditor.tool.Compatibility; +import net.fckeditor.tool.Utils; +import net.fckeditor.tool.XHtmlTagTool; + +/** + * Java representation of the FCKeditor. This representation reflects the editor in an + * object-oriented way. It can be configured as any other JavaBean type class. + * The final output of this class is HTML code.
+ * Note: It's your responsibility to supply reasonable and + * valid values, only {@code request}, {@code instanceName} and {@code inputName} + * will be checked for sanity. + * + * @version $Id$ + */ +public class FCKeditor { + + private FCKeditorConfig fckConfig = new FCKeditorConfig(); + private String instanceName; + private String inputName; + private HttpServletRequest request; + + // defaults + private String value = Utils.EMPTY_STRING; + private String toolbarSet = PropertiesLoader.getEditorToolbarSet(); + private String width = PropertiesLoader.getEditorWidth(); + private String height = PropertiesLoader.getEditorHeight(); + private String basePath = PropertiesLoader.getEditorBasePath(); + + /** + * Class constructor with all parameters. + * + * @param request + * current user request instance + * @param instanceName + * the unique name of this editor + * @param inputName + * the name for the underlying input element. See + * {@link #setInputName(String)} for details. + * @param width + * the desired editor width (CSS-style value) + * @param height + * the desired editor height (CSS-style value) + * @param toolbarSet + * the desired toolbar set name + * @param value + * the HTML markup of this editor. Markup will be properly + * escaped. + * @param basePath + * the base path of this editor, absolute to the context + * @throws IllegalArgumentException + * if instanceName is empty or not a valid XHTML id + */ + public FCKeditor(HttpServletRequest request, String instanceName, + String inputName, String width, String height, String toolbarSet, + String value, String basePath) { + + this(request, instanceName, inputName); + this.width = width; + this.height = height; + this.toolbarSet = toolbarSet; + this.value = value; + this.basePath = basePath; + + } + + /** + * Class constructor with a extended set of parameters. + * + * @param request + * current user request instance + * @param instanceName + * the unique name of this editor + * @param width + * the desired editor width (CSS-style value) + * @param height + * the desired editor height (CSS-style value) + * @param toolbarSet + * the desired toolbar set name + * @param value + * the HTML markup of this editor. Markup will be properly + * escaped. + * @param basePath + * the base path of this editor, absolute to the context + * @throws IllegalArgumentException + * if instanceName is empty or not a valid XHTML id + */ + public FCKeditor(final HttpServletRequest request, + final String instanceName, final String width, final String height, + final String toolbarSet, final String value, final String basePath) { + + this(request, instanceName, null, width, height, toolbarSet, value, + basePath); + + } + + /** + * Class constructor with a minimal set of parameters. + * + * Omitted parameters will be set to default values. + * + * @param request + * current user request instance + * @param instanceName + * the unique name of this editor + * @throws IllegalArgumentException + * if instanceName is empty or not a valid HTML id + */ + public FCKeditor(final HttpServletRequest request, final String instanceName) { + + if (request == null) + throw new NullPointerException("the request cannot be null"); + this.request = request; + + setInstanceName(instanceName); + + } + + /** + * Class constructor with a basic set of parameters. + * + * Omitted parameters will be set to default values. + * + * @param request + * current user request instance + * @param instanceName + * the unique name of this editor + * @param inputName + * the name for the underlying input element. See + * {@link #setInputName(String)} for details. + * @throws IllegalArgumentException + * if instanceName is empty or not a valid HTML id + */ + public FCKeditor(HttpServletRequest request, String instanceName, + String inputName) { + this(request, instanceName); + setInputName(inputName); + } + + /** + * Sets the unique name of this editor. + * + * @param instanceName + * the unique name of this editor + * @throws IllegalArgumentException + * if instanceName is empty or not a valid XHTML id + */ + public void setInstanceName(final String instanceName) { + if (Utils.isEmpty(instanceName)) + throw new IllegalArgumentException("instanceName cannot be empty"); + if (!instanceName.matches("\\p{Alpha}[\\p{Alnum}:_.-]*")) + throw new IllegalArgumentException( + "instanceName must be a valid XHTML id containing only \"\\p{Alpha}[\\p{Alnum}:_.-]*\""); + this.instanceName = instanceName; + } + + /** + * Sets the name for the underlying input element. Empty strings will be + * ignored and field will be reset to {@code instanceName}. + * + * @param inputName + * the name for the underlying input element + */ + public void setInputName(final String inputName) { + if (Utils.isEmpty(inputName)) + this.inputName = instanceName; + else + this.inputName = inputName; + } + + /** + * Sets the initial value to be edited as HTML markup. + * + * @param value + * the HTML markup of this editor. Markup will be properly + * escaped. + */ + public void setValue(final String value) { + this.value = value; + } + + /** + * Sets the base path of this editor. The base path reflects the location of + * the editor files absolute to the context root not the server root. + * + * @param basePath + * the base path of this editor, absolute to the context + */ + public void setBasePath(final String basePath) { + this.basePath = basePath; + } + + /** + * Sets the name of the toolbar set of this editor. + * + * @param toolbarSet + * the desired toolbar set name + */ + public void setToolbarSet(final String toolbarSet) { + this.toolbarSet = toolbarSet; + } + + /** + * Sets the width of this editor. This value can be any valid CSS width + * value. + * + * @param width + * the desired editor width (CSS-style value) + */ + public void setWidth(final String width) { + this.width = width; + } + + /** + * Sets the height of this editor. This value can be any valid CSS height + * value. + * + * @param height + * the desired editor height (CSS-style value) + */ + public void setHeight(final String height) { + this.height = height; + } + + /** + * Returns a configuration option. See {@link FCKeditorConfig} for more + * details. + * + * @param name + * the name of the parameter (case-sensitive) + * @return the value represented by this parameter, else null + */ + public String getConfig(String name) { + return fckConfig.get(name); + } + + /** + * Sets a configuration option. See {@link FCKeditorConfig} for more + * details. + * + * @param name + * the name of the config option (case-sensitive) + * @param value + * the value of the config option. Null values will be ignored. + */ + public void setConfig(String name, String value) { + if (value != null) + fckConfig.put(name, value); + } + + /** + * Escapes base XML entities as specified here. + * + * @param str + * string to escape, empty strings will be ignored + * @return escaped string + */ + private String escapeXml(String str) { + + if (Utils.isEmpty(str)) + return str; + + StringBuffer sb = new StringBuffer(); + + int len = str.length(); + char c; + + for (int i = 0; i < len; i++) { + + c = str.charAt(i); + switch (c) { + case '&': + sb.append("&"); + break; + case '<': + sb.append("<"); + break; + case '>': + sb.append(">"); + break; + case '"': + sb.append("""); + break; + // XML actually defines ' as entity for the apostrophe but we + // user rather the numerical reference to avoid XHTML 1.0 validation + // problems + case '\'': + sb.append("'"); + break; + default: + sb.append(c); + break; + } + } + + return sb.toString(); + } + + /** + * Creates the HTML representation of this editor instance. First of all, + * this method determines whether the request browser is supported. + * According to the result an appropriate HTML representation is assembled + * and returned. + * + * @return HTML representation of this editor instance + */ + @Override + public String toString() { + StringBuffer strEditor = new StringBuffer(); + + strEditor.append("
"); + String encodedValue = escapeXml(value); + + /* + * We have to reset inputName to make sure that a potentially reassigned + * instanceName has been propagated to empty field. + */ + setInputName(inputName); + + if (Compatibility.isCompatibleBrowser(request)) { + strEditor.append(createInputForVariable(instanceName, inputName, + encodedValue)); + + // create config HTML + String configStr = fckConfig.getUrlParams(); + if (Utils.isNotEmpty(configStr)) + strEditor.append(createInputForVariable(instanceName + .concat("___Config"), null, configStr)); + + // create IFrame + StringBuffer editorLink = new StringBuffer(request.getContextPath()); + editorLink.append(basePath); + editorLink.append("/editor/fckeditor.html?InstanceName=").append( + instanceName); + if (Utils.isNotEmpty(toolbarSet)) + editorLink.append("&Toolbar=").append(toolbarSet); + + XHtmlTagTool iframeTag = new XHtmlTagTool("iframe", + XHtmlTagTool.SPACE); + iframeTag.addAttribute("id", instanceName.concat("___Frame")); + iframeTag.addAttribute("src", editorLink.toString()); + iframeTag.addAttribute("width", width); + iframeTag.addAttribute("height", height); + iframeTag.addAttribute("frameborder", "0"); + iframeTag.addAttribute("scrolling", "no"); + strEditor.append(iframeTag); + + } else { + XHtmlTagTool textareaTag = new XHtmlTagTool("textarea", + encodedValue); + textareaTag.addAttribute("name", inputName); + textareaTag.addAttribute("rows", "4"); + textareaTag.addAttribute("cols", "40"); + textareaTag.addAttribute("wrap", "virtual"); + textareaTag.addAttribute("style", "width: ".concat(width).concat( + "; height: ").concat(height)); + } + strEditor.append("
"); + return strEditor.toString(); + } + + /** + * Creates the HTML representation of this editor instance. + * + * @see #toString() + * @return HTML representation of this editor instance + */ + public String createHtml() { + return toString(); + } + + /** + * Creates a hidden input element for the given attributes. + * @param id + * id attribute of the input tag + * @param name + * name attribute of the input tag + * @param value + * value attribute of the input tag + * + * @return the produced XHTML tag + */ + private String createInputForVariable(final String id, final String name, + final String value) { + XHtmlTagTool tag = new XHtmlTagTool("input"); + tag.addAttribute("id", id); + tag.addAttribute("name", name); + tag.addAttribute("value", value); + tag.addAttribute("type", "hidden"); + return tag.toString(); + } +} \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/FCKeditorConfig.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/FCKeditorConfig.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/FCKeditorConfig.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,74 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor; + +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.HashMap; +import java.util.Map; + +import net.fckeditor.tool.Utils; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Java representation of the FCKConfig object from the editor. Every FCKeditor + * instance will load the config.js by default, if you assign a + * FCKConfig instance to an editor, it will automatically override these + * system-wide settings for the current instance only. + * + * @version $Id$ + */ +public class FCKeditorConfig extends HashMap { + + private static final long serialVersionUID = -4831190504944866644L; + private static final Logger logger = LoggerFactory + .getLogger(FCKeditorConfig.class); + + /** + * Generates the URL parameter sequence for this configuration. + * + * @return HTML-encoded sequence of configuration parameters + */ + public String getUrlParams() { + StringBuffer osParams = new StringBuffer(); + try { + for (Map.Entry entry : this.entrySet()) { + if (Utils.isNotEmpty(entry.getValue())) { + osParams.append("&"); + osParams.append(entry.getKey()); + osParams.append("="); + osParams.append(URLEncoder + .encode(entry.getValue(), "UTF-8")); + } + } + + } catch (UnsupportedEncodingException e) { + logger.error("Configuration parameters could not be encoded", e); + } + + if (osParams.length() > 0) + osParams.delete(0, 5); + return osParams.toString(); + } +} \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/connector/Connector.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/connector/Connector.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/connector/Connector.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,171 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor.connector; + +import java.io.InputStream; +import java.util.List; +import java.util.Map; + +import javax.servlet.ServletContext; + +import net.fckeditor.connector.exception.FolderAlreadyExistsException; +import net.fckeditor.connector.exception.InvalidCurrentFolderException; +import net.fckeditor.connector.exception.InvalidNewFolderNameException; +import net.fckeditor.connector.exception.ReadException; +import net.fckeditor.connector.exception.WriteException; +import net.fckeditor.connector.impl.AbstractLocalFileSystemConnector; +import net.fckeditor.handlers.RequestCycleHandler; +import net.fckeditor.handlers.ResourceType; +import net.fckeditor.requestcycle.ThreadLocalData; + +/** + * Backend interface of a File Browser connector. A connector serves and manages + * files and folders accessed through the File Browser on an arbitrary backend + * system.
+ * The connector will receive a request if, and only if, the request was valid + * in terms of valid and reasonable parameters up to an abstract point which is + * independent from a specific connector implementation. + *

+ * Helpful classes and methods: + *

    + *
  1. If you need to access the request instance itself and/or the context + * parameters sent from the File Browser, take a look at the + * {@link ThreadLocalData} class.
  2. + *
  3. Use + * {@link RequestCycleHandler#getUserFilesAbsolutePath(javax.servlet.http.HttpServletRequest) + * RequestCycleHandler.getUserFilesAbsolutePath}, + * {@link AbstractLocalFileSystemConnector#getRealUserFilesAbsolutePath(java.lang.String) + * AbstractLocalFileSystemConnector.getRealUserFilesAbsolutePath} (if use it) to + * resolve the real path or simply do it yourself.
  4. + *
+ *

+ * + * @version $Id$ + */ +public interface Connector { + + /** Key 'name' for a file's name */ + public final static String KEY_NAME = "name"; + + /** Key 'size' for a file's length */ + public final static String KEY_SIZE = "size"; + + /** + * Initializes this connector. Called at {@link Dispatcher dispatcher} + * initialization. + * + * @param servletContext + * reference to the {@link ServletContext} in which the caller is + * running + * @throws Exception + * if the connector initialization fails due to some reason + */ + public void init(final ServletContext servletContext) throws Exception; + + /** + * Returns a list of file attributes from the backend. Use the pre-defined + * keys ({@value #KEY_NAME}, {@value #KEY_SIZE}) to put file attributes into + * the file map. The file length can be any instance of {@link Number}, its + * long value will be taken as the final value. + * + * @param type + * the current resource type + * @param currentFolder + * the current folder + * @return a list of file attributes + * @throws InvalidCurrentFolderException + * if the current folder name is invalid or does not exist + * within the underlying backend + * @throws ReadException + * if the file attributes could not be read due to some reason + */ + public List> getFiles(final ResourceType type, + final String currentFolder) throws InvalidCurrentFolderException, + ReadException; + + /** + * Returns a list of folders from the backend. + * + * @param type + * the current resource type + * @param currentFolder + * the current folder + * @return a list of folder names + * @throws InvalidCurrentFolderException + * if the current folder name is invalid or does not exist + * within the underlying backend + * @throws ReadException + * if the folder names could not be read due to some reason + */ + public List getFolders(final ResourceType type, + final String currentFolder) throws InvalidCurrentFolderException, + ReadException; + + /** + * Creates a new folder on the backend. + * + * @param type + * the current resource type + * @param currentFolder + * the current folder + * @param newFolder + * name of the new folder + * @throws InvalidCurrentFolderException + * if the current folder name is invalid or does not exist + * within the underlying backend + * @throws InvalidNewFolderNameException + * if the new folder name is invalid due to some reason + * @throws FolderAlreadyExistsException + * if the new folder already exists + * @throws WriteException + * if the new folder could not be created due to some reason + */ + public void createFolder(final ResourceType type, + final String currentFolder, final String newFolder) + throws InvalidCurrentFolderException, + InvalidNewFolderNameException, FolderAlreadyExistsException, + WriteException; + + /** + * Uploads a new file on to the backend. You are not allowed to overwrite + * already existing files, rename the new file and return the new filename. + * + * @param type + * the current resource type + * @param currentFolder + * the current folder + * @param fileName + * the name of the new file + * @param inputStream + * input stream of the new file + * @return the (eventually renamed) name of the uploaded file + * @throws InvalidCurrentFolderException + * if the current folder name is invalid or does not exist + * within the underlying backend + * @throws WriteException + * if the new file could not be created due to some reason + */ + public String fileUpload(final ResourceType type, + final String currentFolder, final String fileName, + final InputStream inputStream) + throws InvalidCurrentFolderException, WriteException; + +} \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/connector/ConnectorServlet.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/connector/ConnectorServlet.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/connector/ConnectorServlet.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,145 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor.connector; + +import java.io.IOException; +import java.io.PrintWriter; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import net.fckeditor.requestcycle.ThreadLocalData; +import net.fckeditor.response.GetResponse; +import net.fckeditor.response.UploadResponse; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Connector servlet of the File Browser. It accepts requests begins the request + * cycle, forwards requests to the {@link Dispatcher dispatcher} and ends the + * request cycle with an appropriate {@link net.fckeditor.response response}. + * + * @version $Id$ + */ +public class ConnectorServlet extends HttpServlet { + private static final long serialVersionUID = -5742008970929377161L; + private final Logger logger = LoggerFactory.getLogger(ConnectorServlet.class); + private transient Dispatcher dispatcher; + + /** + * Initializes this servlet. It initializes the dispatcher internally. + * + * @throws ServletException + * if an exception occurs that interrupts the servlet's normal + * operation + */ + @Override + public void init() throws ServletException { + try { + dispatcher = new Dispatcher(getServletContext()); + } catch (Exception e) { + logger.error("Dispatcher could not be initialized", e); + throw new ServletException(e); + } + } + + /** + * Passes a GET request to the dispatcher. + * + * @throws IOException + * if an input or output error is detected when the servlet + * handles the GET request + * @throws ServletException + * if the request for the GET could not be handled + */ + @Override + protected void doGet(final HttpServletRequest request, + final HttpServletResponse response) throws ServletException, + IOException { + request.setCharacterEncoding("UTF-8"); + response.setCharacterEncoding("UTF-8"); + response.setContentType("application/xml"); + response.setHeader("Cache-Control", "no-cache"); + PrintWriter out = response.getWriter(); + GetResponse getResponse = null; + + try { + ThreadLocalData.beginRequest(request); + getResponse = dispatcher.doGet(request); + } catch (Exception e) { + throw new ServletException(e); + } finally { + /* + * call this method to prevent detached requests or else the request + * will probably never be garbage collected and will fill your + * memory + */ + ThreadLocalData.endRequest(); + } + + out.print(getResponse); + out.flush(); + out.close(); + } + + /** + * Passes a POST request to the dispatcher. + * + * @throws IOException + * if an input or output error is detected when the servlet + * handles the request + * @throws ServletException + * if the request for the POST could not be handled + */ + @Override + protected void doPost(final HttpServletRequest request, + final HttpServletResponse response) throws ServletException, + IOException { + request.setCharacterEncoding("UTF-8"); + response.setCharacterEncoding("UTF-8"); + response.setContentType("text/html"); + response.setHeader("Cache-Control", "no-cache"); + PrintWriter out = response.getWriter(); + UploadResponse uploadResponse = null; + + try { + ThreadLocalData.beginRequest(request); + uploadResponse = dispatcher.doPost(request); + } catch (Exception e) { + throw new ServletException(e); + } finally { + /* + * call this method to prevent detached requests or else the request + * will probably never be garbage collected and will fill your + * memory + */ + ThreadLocalData.endRequest(); + } + + out.print(uploadResponse); + out.flush(); + out.close(); + } + +} \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/connector/Dispatcher.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/connector/Dispatcher.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/connector/Dispatcher.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,305 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor.connector; + +import java.io.IOException; +import java.util.List; + +import javax.servlet.ServletContext; +import javax.servlet.http.HttpServletRequest; + +import net.fckeditor.connector.exception.FolderAlreadyExistsException; +import net.fckeditor.connector.exception.InvalidCurrentFolderException; +import net.fckeditor.connector.exception.InvalidNewFolderNameException; +import net.fckeditor.connector.exception.ReadException; +import net.fckeditor.connector.exception.WriteException; +import net.fckeditor.handlers.Command; +import net.fckeditor.handlers.PropertiesLoader; +import net.fckeditor.handlers.RequestCycleHandler; +import net.fckeditor.handlers.ResourceType; +import net.fckeditor.requestcycle.Context; +import net.fckeditor.requestcycle.ThreadLocalData; +import net.fckeditor.response.GetResponse; +import net.fckeditor.response.UploadResponse; +import net.fckeditor.tool.Utils; +import net.fckeditor.tool.UtilsFile; +import net.fckeditor.tool.UtilsResponse; + +import org.apache.commons.fileupload.FileItem; +import org.apache.commons.fileupload.FileItemFactory; +import org.apache.commons.fileupload.FileUploadException; +import org.apache.commons.fileupload.disk.DiskFileItemFactory; +import org.apache.commons.fileupload.servlet.ServletFileUpload; +import org.apache.commons.io.FilenameUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * File Browser request dispatcher. This class is the validating and managing + * instance between the {@link ConnectorServlet connector servlet} and the + * {@link Connector connector}. It receives the requests, parses the parameters, + * validates/sanitizes them and mandates them to the connector. After the + * connector has processed the request, this dispatcher passes the response back + * to the connector servlet. More over, it intercepts all + * {@link net.fckeditor.connector.exception specified exceptions} from a + * connector and emits appropriate (localized) messages to the user. The + * exceptions won't be logged, they simply indicate the connector state. + * + * @version $Id$ + */ +public class Dispatcher { + private static final Logger logger = LoggerFactory.getLogger(Dispatcher.class); + private Connector connector; + + /** + * Initializes this dispatcher. It initializes the connector internally. + * Called at connector servlet {@link ConnectorServlet#init() + * initialization}. + * + * @param servletContext + * reference to the {@link ServletContext} in which the caller is + * running + * @throws Exception + * if the dispatcher initialization fails due to some reason + */ + Dispatcher(final ServletContext servletContext) throws Exception { + // try to instantiate the Connector object + String className = PropertiesLoader.getConnectorImpl(); + if (Utils.isEmpty(className)) + logger.error("Empty Connector implementation class name provided"); + else { + try { + Class clazz = Class.forName(className); + connector = (Connector) clazz.newInstance(); + logger.info("Connector initialized to {}", className); + } catch (Throwable e) { + logger.error("Connector implementation {} could not be instantiated", className); + throw new RuntimeException("Connector implementation " + className + " could not be instantiated", e); //$NON-NLS-1$ + } + } + connector.init(servletContext); + } + + /** + * Called by the connector servlet to handle a {@code GET} request. In + * particular, it handles the {@link Command#GET_FOLDERS GetFolders}, + * {@link Command#GET_FOLDERS_AND_FILES GetFoldersAndFiles} and + * {@link Command#CREATE_FOLDER CreateFolder} commands. + * + * @param request + * the current request instance + * @return the get response instance associated with this request + */ + GetResponse doGet(final HttpServletRequest request) { + logger.debug("Entering Dispatcher#doGet"); + + Context context = ThreadLocalData.getContext(); + context.logBaseParameters(); + + GetResponse getResponse = null; + // check parameters + if (!Command.isValidForGet(context.getCommandStr())) + getResponse = GetResponse.getInvalidCommandError(); + else if (!ResourceType.isValidType(context.getTypeStr())) + getResponse = GetResponse.getInvalidResourceTypeError(); + else if (!UtilsFile.isValidPath(context.getCurrentFolderStr())) + getResponse = GetResponse.getInvalidCurrentFolderError(); + else { + + // in contrast to doPost the referrer has to send an explicit type + ResourceType type = context.getResourceType(); + Command command = context.getCommand(); + + // check permissions for user action + if ((command.equals(Command.GET_FOLDERS) || command.equals(Command.GET_FOLDERS_AND_FILES)) + && !RequestCycleHandler.isGetResourcesEnabled(request)) + getResponse = GetResponse.getGetResourcesDisabledError(); + else if (command.equals(Command.CREATE_FOLDER) && !RequestCycleHandler.isCreateFolderEnabled(request)) + getResponse = GetResponse.getCreateFolderDisabledError(); + else { + // make the connector calls, catch its exceptions and generate + // the proper response object + try { + if (command.equals(Command.CREATE_FOLDER)) { + String newFolderNameStr = request + .getParameter("NewFolderName"); + logger.debug("Parameter NewFolderName: {}", + newFolderNameStr); + String sanitizedNewFolderNameStr = UtilsFile + .sanitizeFolderName(newFolderNameStr); + if (Utils.isEmpty(sanitizedNewFolderNameStr)) + getResponse = GetResponse + .getInvalidNewFolderNameError(); + else { + logger.debug( + "Parameter NewFolderName (sanitized): {}", + sanitizedNewFolderNameStr); + connector.createFolder(type, context + .getCurrentFolderStr(), + sanitizedNewFolderNameStr); + getResponse = GetResponse.getOK(); + } + } else if (command.equals(Command.GET_FOLDERS) + || command + .equals(Command.GET_FOLDERS_AND_FILES)) { + String url = UtilsResponse.getUrl(RequestCycleHandler + .getUserFilesPath(request), type, context + .getCurrentFolderStr()); + getResponse = getFoldersAndOrFiles(command, type, context + .getCurrentFolderStr(), url); + } + } catch (InvalidCurrentFolderException e) { + getResponse = GetResponse.getInvalidCurrentFolderError(); + } catch (InvalidNewFolderNameException e) { + getResponse = GetResponse.getInvalidNewFolderNameError(); + } catch (FolderAlreadyExistsException e) { + getResponse = GetResponse.getFolderAlreadyExistsError(); + } catch (WriteException e) { + getResponse = GetResponse.getCreateFolderWriteError(); + } catch (ReadException e) { + getResponse = GetResponse.getGetResourcesReadError(); + } + } + } + + logger.debug("Exiting Dispatcher#doGet"); + return getResponse; + } + + /** + * Returns get response for the {@code GetFolders*} commands. This is simply + * a helper method. + * + * @param command + * the current command, should be only GetFolders or + * GetFoldersAndFiles + * @param the + * current resource type + * @param currentFolder + * the current folder + * @param constructedUrl + * the final URL + * @return the get response instance associated with this request + * @throws InvalidCurrentFolderException + * if the current folder name is invalid or does not exist + * within the underlying backend + * @throws ReadException + * if the file attributes and/or folder names could not be read + * due to some reason + */ + private GetResponse getFoldersAndOrFiles(final Command command, + final ResourceType type, final String currentFolder, + final String constructedUrl) throws InvalidCurrentFolderException, + ReadException { + GetResponse getResponse = new GetResponse(command, type, + currentFolder, constructedUrl); + getResponse.setFolders(connector.getFolders(type, currentFolder)); + if (command.equals(Command.GET_FOLDERS_AND_FILES)) + getResponse.setFiles(connector.getFiles(type, currentFolder)); + return getResponse; + } + + /** + * Called by the connector servlet to handle a {@code POST} request. In + * particular, it handles the {@link Command#FILE_UPLOAD FileUpload} and + * {@link Command#QUICK_UPLOAD QuickUpload} commands. + * + * @param request + * the current request instance + * @return the upload response instance associated with this request + */ + UploadResponse doPost(final HttpServletRequest request) { + logger.debug("Entering Dispatcher#doPost"); + + Context context = ThreadLocalData.getContext(); + context.logBaseParameters(); + + UploadResponse uploadResponse = null; + // check permissions for user actions + if (!RequestCycleHandler.isFileUploadEnabled(request)) + uploadResponse = UploadResponse.getFileUploadDisabledError(); + // check parameters + else if (!Command.isValidForPost(context.getCommandStr())) + uploadResponse = UploadResponse.getInvalidCommandError(); + else if (!ResourceType.isValidType(context.getTypeStr())) + uploadResponse = UploadResponse.getInvalidResourceTypeError(); + else if (!UtilsFile.isValidPath(context.getCurrentFolderStr())) + uploadResponse = UploadResponse.getInvalidCurrentFolderError(); + else { + + // call the Connector#fileUpload + ResourceType type = context.getDefaultResourceType(); + FileItemFactory factory = new DiskFileItemFactory(); + ServletFileUpload upload = new ServletFileUpload(factory); + try { + List items = upload.parseRequest(request); + // We upload just one file at the same time + FileItem uplFile = items.get(0); + // Some browsers transfer the entire source path not just the + // filename + String fileName = FilenameUtils.getName(uplFile.getName()); + logger.debug("Parameter NewFile: {}", fileName); + // check the extension + if (type.isDeniedExtension(FilenameUtils.getExtension(fileName))) + uploadResponse = UploadResponse.getInvalidFileTypeError(); + // Secure image check (can't be done if QuickUpload) + else if (type.equals(ResourceType.IMAGE) + && PropertiesLoader.isSecureImageUploads() + && !UtilsFile.isImage(uplFile.getInputStream())) { + uploadResponse = UploadResponse.getInvalidFileTypeError(); + } else { + String sanitizedFileName = UtilsFile + .sanitizeFileName(fileName); + logger.debug("Parameter NewFile (sanitized): {}", + sanitizedFileName); + String newFileName = connector.fileUpload(type, context + .getCurrentFolderStr(), sanitizedFileName, uplFile + .getInputStream()); + String fileUrl = UtilsResponse.fileUrl(RequestCycleHandler + .getUserFilesPath(request), type, context + .getCurrentFolderStr(), newFileName); + + if (sanitizedFileName.equals(newFileName)) + uploadResponse = UploadResponse.getOK(fileUrl); + else { + uploadResponse = UploadResponse.getFileRenamedWarning(fileUrl, newFileName); + logger.debug("Parameter NewFile (renamed): {}", + newFileName); + } + } + + uplFile.delete(); + } catch (InvalidCurrentFolderException e) { + uploadResponse = UploadResponse.getInvalidCurrentFolderError(); + } catch (WriteException e) { + uploadResponse = UploadResponse.getFileUploadWriteError(); + } catch (IOException e) { + uploadResponse = UploadResponse.getFileUploadWriteError(); + } catch (FileUploadException e) { + uploadResponse = UploadResponse.getFileUploadWriteError(); + } + } + + logger.debug("Exiting Dispatcher#doPost"); + return uploadResponse; + } + +} \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/connector/exception/FolderAlreadyExistsException.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/connector/exception/FolderAlreadyExistsException.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/connector/exception/FolderAlreadyExistsException.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,33 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor.connector.exception; + +/** + * Thrown to indicate that the requested folder cannot be created because it + * already exists. + * + * @version $Id$ + */ +public class FolderAlreadyExistsException extends Exception { + + private static final long serialVersionUID = 2526172654962583635L; + +} \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/connector/exception/InvalidCurrentFolderException.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/connector/exception/InvalidCurrentFolderException.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/connector/exception/InvalidCurrentFolderException.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,32 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor.connector.exception; + +/** + * Thrown when an improper/invalid current folder was provided/requested. + * + * @version $Id$ + */ +public class InvalidCurrentFolderException extends Exception { + + private static final long serialVersionUID = 8569316682489606369L; + +} \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/connector/exception/InvalidNewFolderNameException.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/connector/exception/InvalidNewFolderNameException.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/connector/exception/InvalidNewFolderNameException.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,32 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor.connector.exception; + +/** + * Thrown when an improper/invalid new folder name was provided. + * + * @version $Id$ + */ +public class InvalidNewFolderNameException extends Exception { + + private static final long serialVersionUID = 85317665011505135L; + +} \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/connector/exception/ReadException.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/connector/exception/ReadException.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/connector/exception/ReadException.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,32 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor.connector.exception; + +/** + * Thrown to indicate that an error has occurred during some read action. + * + * @version $Id$ + */ +public class ReadException extends Exception { + + private static final long serialVersionUID = 6418053231588982734L; + +} \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/connector/exception/WriteException.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/connector/exception/WriteException.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/connector/exception/WriteException.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,32 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor.connector.exception; + +/** + * Thrown to indicate that an error has occurred during some write action. + * + * @version $Id$ + */ +public class WriteException extends Exception { + + private static final long serialVersionUID = 7742121738185371543L; + +} \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/connector/exception/package-info.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/connector/exception/package-info.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/connector/exception/package-info.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,27 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ + +/** + * Custom {@link net.fckeditor.connector.Connector connector} exceptions. + * + * @version $Id$ + */ +package net.fckeditor.connector.exception; \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/connector/impl/AbstractLocalFileSystemConnector.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/connector/impl/AbstractLocalFileSystemConnector.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/connector/impl/AbstractLocalFileSystemConnector.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,175 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor.connector.impl; + +import java.io.File; +import java.io.FileFilter; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.servlet.ServletContext; + +import net.fckeditor.connector.Connector; +import net.fckeditor.connector.exception.FolderAlreadyExistsException; +import net.fckeditor.connector.exception.InvalidCurrentFolderException; +import net.fckeditor.connector.exception.InvalidNewFolderNameException; +import net.fckeditor.connector.exception.WriteException; +import net.fckeditor.handlers.RequestCycleHandler; +import net.fckeditor.handlers.ResourceType; +import net.fckeditor.requestcycle.ThreadLocalData; +import net.fckeditor.requestcycle.UserPathBuilder; +import net.fckeditor.tool.UtilsFile; + +import org.apache.commons.io.IOUtils; +import org.apache.commons.io.filefilter.DirectoryFileFilter; +import org.apache.commons.io.filefilter.FileFileFilter; + +/** + * Abstract local filesystem backend connector. This class is the default + * implementation of the official connector specification. + *

+ * It serves files and folders against a specific local directory which is + * resolved in a subclass. You cannot use this class directly, instead you have + * to subclass it and implement the abstract methods and override methods if + * necessary. + * + * @version $Id$ + */ +public abstract class AbstractLocalFileSystemConnector implements Connector { + + protected ServletContext servletContext; + + public String fileUpload(final ResourceType type, + final String currentFolder, final String fileName, + final InputStream inputStream) + throws InvalidCurrentFolderException, WriteException { + String absolutePath = getRealUserFilesAbsolutePath(RequestCycleHandler + .getUserFilesAbsolutePath(ThreadLocalData.getRequest())); + File typeDir = getOrCreateResourceTypeDir(absolutePath, type); + File currentDir = new File(typeDir, currentFolder); + if (!currentDir.exists() || !currentDir.isDirectory()) + throw new InvalidCurrentFolderException(); + + File newFile = new File(currentDir, fileName); + File fileToSave = UtilsFile.getUniqueFile(newFile.getAbsoluteFile()); + + try { + IOUtils.copyLarge(inputStream, new FileOutputStream(fileToSave)); + } catch (IOException e) { + throw new WriteException(); + } + return fileToSave.getName(); + } + + public void createFolder(final ResourceType type, + final String currentFolder, final String newFolder) + throws InvalidCurrentFolderException, + InvalidNewFolderNameException, FolderAlreadyExistsException { + String absolutePath = getRealUserFilesAbsolutePath(RequestCycleHandler + .getUserFilesAbsolutePath(ThreadLocalData.getRequest())); + File typeDir = getOrCreateResourceTypeDir(absolutePath, type); + File currentDir = new File(typeDir, currentFolder); + if (!currentDir.exists() || !currentDir.isDirectory()) + throw new InvalidCurrentFolderException(); + + File newDir = new File(currentDir, newFolder); + if (newDir.exists()) + throw new FolderAlreadyExistsException(); + if (!newDir.mkdir()) + throw new InvalidNewFolderNameException(); + } + + public List> getFiles(ResourceType type, + String currentFolder) throws InvalidCurrentFolderException { + String absolutePath = getRealUserFilesAbsolutePath(RequestCycleHandler + .getUserFilesAbsolutePath(ThreadLocalData.getRequest())); + File typeDir = getOrCreateResourceTypeDir(absolutePath, type); + File currentDir = new File(typeDir, currentFolder); + if (!currentDir.exists() || !currentDir.isDirectory()) + throw new InvalidCurrentFolderException(); + + // collect files + List> files; + Map fileMap; + File[] fileList = currentDir + .listFiles((FileFilter) FileFileFilter.FILE); + files = new ArrayList>(fileList.length); + for (File file : fileList) { + fileMap = new HashMap(2); + fileMap.put(Connector.KEY_NAME, file.getName()); + fileMap.put(Connector.KEY_SIZE, file.length()); + files.add(fileMap); + } + return files; + } + + public List getFolders(final ResourceType type, + final String currentFolder) throws InvalidCurrentFolderException { + String absolutePath = getRealUserFilesAbsolutePath(RequestCycleHandler + .getUserFilesAbsolutePath(ThreadLocalData.getRequest())); + File typeDir = getOrCreateResourceTypeDir(absolutePath, type); + File currentDir = new File(typeDir, currentFolder); + if (!currentDir.exists() || !currentDir.isDirectory()) + throw new InvalidCurrentFolderException(); + + String[] fileList = currentDir.list(DirectoryFileFilter.DIRECTORY); + return Arrays.asList(fileList); + } + + /** + * Resolves a provided userfiles absolute path against a specific backend. + * The is no restriction how to resolve the path. To keep it simple, you may + * use + * {@link UserPathBuilder#getUserFilesAbsolutePath(javax.servlet.http.HttpServletRequest) UserPathBuilder.getUserFilesAbsolutePath}. + * The return value has to be consistent within the entire request cycle. + * + * @param userFilesAbsolutePath + * the userfiles absolute path to resolve against a specific + * backend + * @return the resolved userfiles absolute path + */ + protected abstract String getRealUserFilesAbsolutePath(String userFilesAbsolutePath); + + /** + * Returns a file reference to a created resource type directory. The + * directory will be created only if it does not exist. + * + * @param baseDir + * the current resource type's base directory + * @param type + * the current resource type + * @return a file reference the resource type directory + */ + protected static File getOrCreateResourceTypeDir(final String baseDir, + final ResourceType type) { + File dir = new File(baseDir, type.getPath()); + if (!dir.exists()) + dir.mkdirs(); + return dir; + } +} \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/connector/impl/ContextConnector.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/connector/impl/ContextConnector.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/connector/impl/ContextConnector.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,87 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor.connector.impl; + +import javax.servlet.ServletContext; + +import net.fckeditor.handlers.PropertiesLoader; +import net.fckeditor.requestcycle.impl.ContextPathBuilder; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Context filesystem backend connector. The file access will be restricted to + * the real context root of the currently deployed webapp. + *

+ * Though, this connector has some drawbacks: + *

    + *
  • Stored files and folders will be gone if the context is undeployed, + * unless you have saved them before.
  • + *
  • Some servers are unable to write to the real context root (like + * WebSphere), see {@link #init(ServletContext)} for more details.
  • + *
  • Some containers (like Jetty) unpack the war file to a different directory + * at server start which means that files are gone in temp.
  • + *
+ *

+ * Use the {@link ContextPathBuilder} in conjunction with this class. + * + * @version $Id$ + */ +public class ContextConnector extends AbstractLocalFileSystemConnector { + + private final Logger logger = LoggerFactory.getLogger(ContextConnector.class); + + /** + * {@inheritDoc} + * This method will prepare the connector for further usage, additionally it + * will check if the aforementioned drawback exists. It will try to resolve + * the default {@link PropertiesLoader#getUserFilesPath() UserFilesPath} + * with + * ServletContext.getRealPath(String) against the + * local filesystem (real path). If it fails, it will emit helpful log + * messages and will throw an exception too. + */ + public void init(final ServletContext servletContext) throws Exception { + this.servletContext = servletContext; + String defaultAbsolutePath = getRealUserFilesAbsolutePath(PropertiesLoader + .getUserFilesPath()); + + if (defaultAbsolutePath == null) { + logger.error("The context root cannot be resolved against the local filesystem"); + logger.info("Your servlet container/application server does not expand deployed war files"); + logger.debug("Use another Connector implementation (e.g. LocalConnector) and consult http://www.fckeditor.net/forums/viewtopic.php?f=6&t=11568"); + throw new NullPointerException( + "The real context root cannot be resolved against the local filesystem"); + } + } + + /** + * Resolves the userfiles absolute path against the current context real + * path. + */ + @Override + protected String getRealUserFilesAbsolutePath(String userFilesAbsolutePath) { + return servletContext.getRealPath(userFilesAbsolutePath); + } + +} \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/connector/impl/LocalConnector.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/connector/impl/LocalConnector.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/connector/impl/LocalConnector.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,63 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor.connector.impl; + +import javax.servlet.ServletContext; + +import net.fckeditor.requestcycle.impl.ServerRootPathBuilder; + +/** + * Real local filesystem backend connector. The file access is translated as-is + * to the local filesystem. + *

+ * This maybe interesting for those who serve userfiles + *

    + *
  • from a static context of a servlet container/application + * server,
  • + *
  • from virtual servers with Apache HTTPd on different + * domains, e.g. http://userfiles.mydomain.com, or
  • + *
  • on a per-user basis, e.g. uploading to + * /home/$USERNAME/public_html/fckeditor and an Apache HTTPd serves + * as /~$USERNAME/fckeditor.
  • + *
+ *

+ * Use the {@link ServerRootPathBuilder} in conjunction with this class. + * + * @version $Id$ + */ +public class LocalConnector extends AbstractLocalFileSystemConnector { + + /** + * {@inheritDoc} Assigns only the {@code servletContext}. + */ + public void init(final ServletContext servletContext) throws Exception { + this.servletContext = servletContext; + } + + /** + * Returns the passed parameter as-is. + */ + @Override + protected String getRealUserFilesAbsolutePath(String userFilesAbsolutePath) { + return userFilesAbsolutePath; + } + +} \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/connector/impl/package-info.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/connector/impl/package-info.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/connector/impl/package-info.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,27 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ + +/** + * Default implementations for the connector interface. + * + * @version $Id$ + */ +package net.fckeditor.connector.impl; \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/connector/package-info.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/connector/package-info.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/connector/package-info.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,33 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ + +/** + * Central interfaces and classes for the connector life cycle. They accept a + * File Browser request and manage its correct handling. + *

+ * The sequence diagram below depicts the interaction between interfaces and + * classes:
+ * Connector Life Cycle Diagram + *

+ * @version $Id$ + */ +package net.fckeditor.connector; \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/handlers/Command.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/handlers/Command.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/handlers/Command.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,206 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor.handlers; + +import java.util.HashMap; +import java.util.Map; + +import net.fckeditor.tool.Utils; + +/** + * File Browser GET and POST commands.
+ * The File Browser sends a specific command for each and every request. This + * class is intended to reflect these in an Enum-like manner. + *

+ * The commands are for GET: + *

    + *
  • GetFolders
  • + *
  • GetFoldersAndFiles
  • + *
  • CreateFolder
  • + *
+ * and for POST: + *
    + *
  • FileUpload
  • + *
  • QuickUpload
  • + *
+ * + * @version $Id$ + */ +public class Command { + + private String name; + private static final Map getCommands = new HashMap( + 3); + private static final Map postCommands = new HashMap( + 2); + /** GET command GetFolders */ + public static final Command GET_FOLDERS = new Command("GetFolders"); + /** GET command GetFoldersAndFiles */ + public static final Command GET_FOLDERS_AND_FILES = new Command( + "GetFoldersAndFiles"); + /** GET command CreateFolder */ + public static final Command CREATE_FOLDER = new Command("CreateFolder"); + /** POST command FileUpload */ + public static final Command FILE_UPLOAD = new Command("FileUpload"); + /** POST command QuickUpload */ + public static final Command QUICK_UPLOAD = new Command("QuickUpload"); + + static { + // initialize the get commands + getCommands.put(GET_FOLDERS.getName(), GET_FOLDERS); + getCommands.put(GET_FOLDERS_AND_FILES.getName(), GET_FOLDERS_AND_FILES); + getCommands.put(CREATE_FOLDER.getName(), CREATE_FOLDER); + + // initialize the post commands + postCommands.put(FILE_UPLOAD.getName(), FILE_UPLOAD); + postCommands.put(QUICK_UPLOAD.getName(), QUICK_UPLOAD); + } + + /** + * Constructs a command with the given name. + * + * @param name + * the name of the new command + */ + private Command(final String name) { + this.name = name; + } + + /** + * Returns the name of this command. + * + * @return the name of this command + */ + public String getName() { + return name; + } + + /** + * Returns the command constant with the specified name. + * + * @param name + * the name of the constant to return + * @return the command constant with the specified name + * @throws IllegalArgumentException + * if this class has no constant with the specified name + * @throws NullPointerException + * if name is null or empty + */ + public static Command valueOf(final String name) { + if (Utils.isEmpty(name)) + throw new NullPointerException("Name is null or empty"); + + Command command = getCommands.get(name); + if (command == null) + command = postCommands.get(name); + if (command == null) + throw new IllegalArgumentException("No command const " + name); + + return command; + } + + /** + * Returns true if name represents a valid GET + * command constant. + * + * @param name + * the command to check + * @return true if name represents a valid command, else + * false + */ + public static boolean isValidForGet(final String name) { + return getCommands.containsKey(name); + } + + /** + * Returns true if name represents a valid POST + * command constant. + * + * @param name + * the command to check + * @return true if name represents a valid command, else + * false + */ + public static boolean isValidForPost(final String name) { + return postCommands.containsKey(name); + } + + /** + * Returns the command constant with the specified name. In contrast to + * {@link #valueOf(String)} it returns a null instead of throwing an + * exception if a command constant was not found. + * + * @param name + * the name of the constant to return + * @return the command constant with the specified name, else + * null + */ + public static Command getCommand(final String name) { + try { + return Command.valueOf(name); + } catch (Exception e) { + return null; + } + } + + /** + * Compares the specified object with this command for equality. The + * comparison is based on class and name only. + * + * @param obj + * Object to be compared with this command. + * @return true if the specified object is equal to this + * command + */ + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + + if (obj == null || this.getClass() != obj.getClass()) + return false; + + final Command command = (Command) obj; + return name.equals(command.getName()); + } + + /** + * Returns the hash code value for this command. The hash code equals the + * hash code of the name field. + * + * @return the hash code value for this command + */ + @Override + public int hashCode() { + return name.hashCode(); + } + + /** + * Returns a string representation of this command. + * + * @return a string representation of this command + * @see #getName() + */ + @Override + public String toString() { + return name; + } +} Index: 3rdParty_sources/ckeditor/net/fckeditor/handlers/PropertiesLoader.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/handlers/PropertiesLoader.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/handlers/PropertiesLoader.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,307 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor.handlers; + +import java.io.BufferedInputStream; +import java.io.InputStream; +import java.util.Properties; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Manages FCKeditor.Java properties files. + *

+ * It manages/loads the properties files in the following order: + *

    + *
  1. the default properties as defined here, + *
  2. the user-defined properties (fckeditor.properties) if + * present. + *
+ * This means that user-defined properties override default ones. In + * the backend it utilizes the regular {@link Properties} class. + *

+ *

+ * Moreover, you can set properties programmatically too but make sure to + * override them before the first call of that specific property. + * + * @version $Id$ + */ +public class PropertiesLoader { + private static final Logger logger = LoggerFactory + .getLogger(PropertiesLoader.class); + private static final String DEFAULT_FILENAME = "default.properties"; + private static final String LOCAL_PROPERTIES = "/fckeditor.properties"; + private static Properties properties = new Properties(); + + static { + + // 1. load library defaults + InputStream in = PropertiesLoader.class + .getResourceAsStream(DEFAULT_FILENAME); + + if (in == null) { + logger.error("{} not found", DEFAULT_FILENAME); + throw new RuntimeException(DEFAULT_FILENAME + " not found"); + } else { + if (!(in instanceof BufferedInputStream)) + in = new BufferedInputStream(in); + + try { + properties.load(in); + in.close(); + logger.debug("{} loaded", DEFAULT_FILENAME); + } catch (Exception e) { + logger.error("Error while processing {}", DEFAULT_FILENAME); + throw new RuntimeException("Error while processing " + + DEFAULT_FILENAME, e); + } + } + + // 2. load user defaults if present + InputStream in2 = PropertiesLoader.class + .getResourceAsStream(LOCAL_PROPERTIES); + + if (in2 == null) { + logger.info("{} not found", LOCAL_PROPERTIES); + } else { + + if (!(in2 instanceof BufferedInputStream)) + in2 = new BufferedInputStream(in2); + + try { + properties.load(in2); + in2.close(); + logger.debug("{} loaded", LOCAL_PROPERTIES); + } catch (Exception e) { + logger.error("Error while processing {}", LOCAL_PROPERTIES); + throw new RuntimeException("Error while processing " + + LOCAL_PROPERTIES, e); + } + + } + } + + /** + * Searches for the property with the specified key in this property list. + * + * @see Properties#getProperty(String) + */ + public static String getProperty(final String key) { + return properties.getProperty(key); + } + + /** + * Sets the property with the specified key in this property list. + * + * @see Properties#setProperty(String, String) + */ + public static void setProperty(final String key, final String value) { + properties.setProperty(key, value); + } + + /** + * Returns fckeditor.toolbarSet property + */ + public static String getEditorToolbarSet() { + return properties.getProperty("fckeditor.toolbarSet"); + } + + /** + * Returns fckeditor.width property + */ + public static String getEditorWidth() { + return properties.getProperty("fckeditor.width"); + } + + /** + * Returns fckeditor.height property + */ + public static String getEditorHeight() { + return properties.getProperty("fckeditor.height"); + } + + /** + * Returns fckeditor.basePath property + */ + public static String getEditorBasePath() { + return properties.getProperty("fckeditor.basePath"); + } + + /** + * Returns connector.resourceType.file.path property + */ + public static String getFileResourceTypePath() { + return properties.getProperty("connector.resourceType.file.path"); + } + + /** + * Returns connector.resourceType.flash.path property + */ + public static String getFlashResourceTypePath() { + return properties.getProperty("connector.resourceType.flash.path"); + } + + /** + * Returns connector.resourceType.image.path property + */ + public static String getImageResourceTypePath() { + return properties.getProperty("connector.resourceType.image.path"); + } + + /** + * Returns connector.resourceType.media.path property + */ + public static String getMediaResourceTypePath() { + return properties.getProperty("connector.resourceType.media.path"); + } + + /** + * Returns connector.resourceType.file.extensions.allowed + * property + */ + public static String getFileResourceTypeAllowedExtensions() { + return properties + .getProperty("connector.resourceType.file.extensions.allowed"); + } + + /** + * Returns connector.resourceType.file.extensions.denied + * property + */ + public static String getFileResourceTypeDeniedExtensions() { + return properties + .getProperty("connector.resourceType.file.extensions.denied"); + } + + /** + * Returns connector.resourceType.flash.extensions.allowed + * property + */ + public static String getFlashResourceTypeAllowedExtensions() { + return properties + .getProperty("connector.resourceType.flash.extensions.allowed"); + } + + /** + * Returns connector.resourceType.flash.extensions.denied + * property + */ + public static String getFlashResourceTypeDeniedExtensions() { + return properties + .getProperty("connector.resourceType.flash.extensions.denied"); + } + + /** + * Returns connector.resourceType.image.extensions.allowed + * property + */ + public static String getImageResourceTypeAllowedExtensions() { + return properties + .getProperty("connector.resourceType.image.extensions.allowed"); + } + + /** + * Returns connector.resourceType.image.extensions.denied + * property + */ + public static String getImageResourceTypeDeniedExtensions() { + return properties + .getProperty("connector.resourceType.image.extensions.denied"); + } + + /** + * Returns connector.resourceType.media.extensions.allowed + * property + */ + public static String getMediaResourceTypeAllowedExtensions() { + return properties + .getProperty("connector.resourceType.media.extensions.allowed"); + } + + /** + * Returns connector.resourceType.media.extensions.denied + * property + */ + public static String getMediaResourceTypeDeniedExtensions() { + return properties + .getProperty("connector.resourceType.media.extensions.denied"); + } + + /** + * Returns connector.userFilesPath property + */ + public static String getUserFilesPath() { + return properties.getProperty("connector.userFilesPath"); + } + + /** + * Returns connector.userFilesAbsolutePath property + */ + public static String getUserFilesAbsolutePath() { + return properties.getProperty("connector.userFilesAbsolutePath"); + } + + /** + * Returns connector.forceSingleExtension property + */ + public static boolean isForceSingleExtension() { + return Boolean.valueOf(properties + .getProperty("connector.forceSingleExtension")); + } + + /** + * Returns connector.secureImageUploads property + */ + public static boolean isSecureImageUploads() { + return Boolean.valueOf(properties + .getProperty("connector.secureImageUploads")); + } + + /** + * Returns connector.impl property + */ + public static String getConnectorImpl() { + return properties.getProperty("connector.impl"); + } + + /** + * Returns connector.userActionImpl property + */ + public static String getUserActionImpl() { + return properties.getProperty("connector.userActionImpl"); + } + + /** + * Returns connector.userPathBuilderImpl property + */ + public static String getUserPathBuilderImpl() { + return properties.getProperty("connector.userPathBuilderImpl"); + } + + /** + * Returns connector.localeResolverImpl property + */ + public static String getLocaleResolverImpl() { + return properties.getProperty("localization.localeResolverImpl"); + } +} Index: 3rdParty_sources/ckeditor/net/fckeditor/handlers/RequestCycleHandler.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/handlers/RequestCycleHandler.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/handlers/RequestCycleHandler.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,147 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor.handlers; + +import javax.servlet.http.HttpServletRequest; + +import net.fckeditor.connector.Connector; +import net.fckeditor.requestcycle.UserAction; +import net.fckeditor.requestcycle.UserPathBuilder; +import net.fckeditor.tool.Utils; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Handles the {@link UserAction} and {@link UserPathBuilder} interfaces.
+ * This class instantiates the the chosen implementations and acts as a proxy + * for their methods/access. + * + * @version $Id$ + */ +public class RequestCycleHandler { + private static final Logger logger = LoggerFactory + .getLogger(RequestCycleHandler.class); + private static UserAction userAction = null; + private static UserPathBuilder userPathBuilder = null; + + static { + // If there are more objects to instantiate in future, we could solve + // the following by reflection! + + // 1. try to instantiate the UserAction object + String className = PropertiesLoader.getUserActionImpl(); + if (Utils.isEmpty(className)) + logger.error("Empty UserAction implementation class name provided"); + else { + try { + Class clazz = Class.forName(className); + userAction = (UserAction) clazz.newInstance(); + logger.info("UserAction initialized to {}", className); + } catch (Throwable e) { + logger.error("UserAction implementation {} could not be instantiated", className); + throw new RuntimeException("UserAction implementation " + className + " could not be instantiated", e); //$NON-NLS-1$ + } + } + + // 2. try to instantiate the UserPathBuilder object + className = PropertiesLoader.getUserPathBuilderImpl(); + if (Utils.isEmpty(className)) + logger.error("Empty UserPathBuilder implementation class name provided"); + else { + try { + Class clazz = Class.forName(className); + userPathBuilder = (UserPathBuilder) clazz.newInstance(); + logger.info("UserPathBuilder initialized to {}", className); + } catch (Throwable e) { + logger.error("UserPathBuilder implementation {} could not be instantiated", className); + throw new RuntimeException("UserPathBuilder implementation " + className + " could not be instantiated", e); //$NON-NLS-1$ + } + } + } + + /** + * Returns true if user is allowed to list resources. The + * behavior is specified by the current UserAction instance. + * + * @param request + * current user request instance + * @return true if user is allowed to list resources, false otherwise + * @see UserAction#isEnabledForFileBrowsing(HttpServletRequest) + */ + public static boolean isGetResourcesEnabled(final HttpServletRequest request) { + return userAction.isEnabledForFileBrowsing(request); + } + + /** + * Returns true if user is allowed to upload files. The + * behavior is specified by the current UserAction instance. + * + * @param request + * current user request instance + * @return true if user is allowed to upload files, false otherwise + * @see UserAction#isEnabledForFileUpload(HttpServletRequest) + */ + public static boolean isFileUploadEnabled(HttpServletRequest request) { + return userAction.isEnabledForFileUpload(request); + } + + /** + * Returns true if user is allowed to create folders. The + * behavior is specified by the current UserAction instance. + * + * @param request + * current user request instance + * @return true if user is allowed to create folders, false otherwise + * @see UserAction#isEnabledForFileBrowsing(HttpServletRequest) + */ + public static boolean isCreateFolderEnabled(final HttpServletRequest request) { + return userAction.isCreateFolderEnabled(request); + } + + /** + * Returns the current userfiles path. The path is specified by the current + * UserPathBuilder instance. + * + * @param request + * current user request instance + * @return current userfiles path + * @see UserPathBuilder#getUserFilesPath(HttpServletRequest) + */ + public static String getUserFilesPath(final HttpServletRequest request) { + return userPathBuilder.getUserFilesPath(request); + } + + /** + * Returns the current absolute userfiles path. The path is specified by the + * current UserPathBuilder instance.
+ * Note that the path is absolute to the underlying system of the current + * {@link Connector} instance. + * + * @param request + * current user request instance + * @return current absolute userfiles path + * @see UserPathBuilder#getUserFilesAbsolutePath(HttpServletRequest) + */ + public static String getUserFilesAbsolutePath(final HttpServletRequest request) { + return userPathBuilder.getUserFilesAbsolutePath(request); + } +} Index: 3rdParty_sources/ckeditor/net/fckeditor/handlers/ResourceType.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/handlers/ResourceType.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/handlers/ResourceType.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,302 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor.handlers; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +import net.fckeditor.tool.Utils; + +/** + * File Browser resource types. The File Browser provides a specific resource + * type for each and every request. This class is intended to reflect these in + * an Enum-like manner. + *

+ * The resource types are: + *

    + *
  • File
  • + *
  • Flash
  • + *
  • Image
  • + *
  • Media
  • + *
+ * + * @version $Id$ + */ +public class ResourceType { + + /** The name of the resource type */ + private String name; + /** The absolute path of the resource type */ + private String path; + /** The allowed extensions */ + private Set allowedEextensions; + /** The denied extensions */ + private Set deniedExtensions; + + /** Map holding a String to ResourceType reference */ + private static Map types = new HashMap( + 4); + + /** Resource type File */ + public static final ResourceType FILE = new ResourceType("File", + PropertiesLoader.getFileResourceTypePath(), Utils + .getSet(PropertiesLoader + .getFileResourceTypeAllowedExtensions()), Utils + .getSet(PropertiesLoader + .getFileResourceTypeDeniedExtensions())); + /** Resource type Flash */ + public static final ResourceType FLASH = new ResourceType("Flash", + PropertiesLoader.getFlashResourceTypePath(), Utils + .getSet(PropertiesLoader + .getFlashResourceTypeAllowedExtensions()), Utils + .getSet(PropertiesLoader + .getFlashResourceTypeDeniedExtensions())); + /** Resource type Image */ + public static final ResourceType IMAGE = new ResourceType("Image", + PropertiesLoader.getImageResourceTypePath(), Utils + .getSet(PropertiesLoader + .getImageResourceTypeAllowedExtensions()), Utils + .getSet(PropertiesLoader + .getImageResourceTypeDeniedExtensions())); + /** Resource type Media */ + public static final ResourceType MEDIA = new ResourceType("Media", + PropertiesLoader.getMediaResourceTypePath(), Utils + .getSet(PropertiesLoader + .getMediaResourceTypeAllowedExtensions()), Utils + .getSet(PropertiesLoader + .getMediaResourceTypeDeniedExtensions())); + + static { + types.put(FILE.getName(), FILE); + types.put(FLASH.getName(), FLASH); + types.put(IMAGE.getName(), IMAGE); + types.put(MEDIA.getName(), MEDIA); + } + + /** + * This constructor has been made intentionally made private to provide + * pre-defined types only. + * + * @param name + * the name of the new resource type + * @param path + * the absolute path of the new resource type + * @param allowedEextensions + * the allowed extensions set of the new resource type + * @param deniedExtensions + * the denied extensions set of the new resource type + * @throws IllegalArgumentException + * if both sets are empty + * @throws IllegalArgumentException + * if both sets contain extensions + */ + private ResourceType(final String name, final String path, + final Set allowedEextensions, + final Set deniedExtensions) { + this.name = name; + this.path = path; + + if (allowedEextensions.isEmpty() && deniedExtensions.isEmpty()) + throw new IllegalArgumentException( + "Both sets are empty, one has always to be filled"); + + if (!allowedEextensions.isEmpty() && !deniedExtensions.isEmpty()) + throw new IllegalArgumentException( + "Both sets contain extensions, only one can be filled at the same time"); + + this.allowedEextensions = allowedEextensions; + this.deniedExtensions = deniedExtensions; + } + + /** + * Returns the name of this resource type. + * + * @return the name of this resource type + */ + public String getName() { + return name; + } + + /** + * Returns the absolute path of this resource type. This path is absolute to + * the userfiles path. To set this path, see the configuration. + * + * @return the absolute path of this resource type + */ + public String getPath() { + return path; + } + + /** + * Returns a read-only reference to the allowed extensions set. + * + * @return the read-only allowed extensions set of this resource type + */ + public Set getAllowedEextensions() { + return Collections.unmodifiableSet(allowedEextensions); + } + + /** + * Returns a read-only reference to the denied extensions set. + * + * @return the read-only denied extensions set of this resource type + */ + public Set getDeniedExtensions() { + return Collections.unmodifiableSet(deniedExtensions); + } + + /** + * Returns the resource type constant with the specified name. + * + * @param name + * the name of the constant to return + * @return the resource type constant with the specified name + * @throws IllegalArgumentException + * if this class has no constant with the specified name + * @throws NullPointerException + * if name is null or empty + */ + public static ResourceType valueOf(final String name) { + if (Utils.isEmpty(name)) + throw new NullPointerException("Name is null or empty"); + + ResourceType rt = types.get(name); + if (rt == null) + throw new IllegalArgumentException("No resource type const " + name); + return rt; + } + + /** + * Returns true if name represents a valid resource type + * constant. + * + * @param name + * the resource type to check + * @return true if name represents a valid resource type, else + * false + */ + public static boolean isValidType(final String name) { + // HashMap permits null keys, so it will return false in that case + return types.containsKey(name); + } + + /** + * Returns the resource type constant with the specified name. In contrast + * to {@link #valueOf(String)} it returns a null instead of throwing an + * exception if a resource type constant was not found. + * + * @param name + * the name of the constant to return + * @return the resource type constant with the specified name, else + * null + */ + public static ResourceType getResourceType(final String name) { + try { + return ResourceType.valueOf(name); + } catch (Exception e) { + return null; + } + } + + /** + * Returns the resource type constant with the specified name. In contrast + * to {@link #getResourceType(String)} it returns {@link #FILE} instead of + * returning null. + * + * @param name + * the name of the constant to return + * @return the resource type constant with the specified name, else + * FILE + */ + public static ResourceType getDefaultResourceType(final String name) { + ResourceType rt = getResourceType(name); + return rt == null ? FILE : rt; + } + + /** + * Returns true if extension is allowed. Denied extensions set + * takes precedence over allowed extensions set, in other words a negative + * check is made against denied set and if this fails, allowed set is + * checked. + * + * @param extension + * the extension to check, empty will fail + * @return true if extension is allowed, else + * false + */ + public boolean isAllowedExtension(final String extension) { + if (Utils.isEmpty(extension)) + return false; + String ext = extension.toLowerCase(); + if (allowedEextensions.isEmpty()) + return !deniedExtensions.contains(ext); + if (deniedExtensions.isEmpty()) + return allowedEextensions.contains(ext); + return false; + } + + /** + * Returns true if extension is denied. This method simply + * negates {@link #isAllowedExtension(String)}. + * + * @param extension + * the extension to check, empty will fail + * @return true if extension is denied, else false + */ + public boolean isDeniedExtension(final String extension) { + return !isAllowedExtension(extension); + } + + /** + * Compares the specified object with this resource type for equality. The + * comparison is based on class and name only. + * + * @param obj + * Object to be compared with this resource type. + * @return true if the specified object is equal to this + * resource type + */ + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + + if (obj == null || this.getClass() != obj.getClass()) + return false; + + final ResourceType rt = (ResourceType) obj; + return name.equals(rt.getName()); + } + + /** + * Returns the hash code value for this resource type. The hash code equals + * the hash code of the name field. + * + * @return the hash code value for this resource type + */ + @Override + public int hashCode() { + return name.hashCode(); + } +} Index: 3rdParty_sources/ckeditor/net/fckeditor/handlers/package-info.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/handlers/package-info.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/handlers/package-info.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,27 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ + +/** + * Different handlers for various purposes used in the entire system. + * + * @version $Id$ + */ +package net.fckeditor.handlers; \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/localization/LocaleResolver.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/localization/LocaleResolver.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/localization/LocaleResolver.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,48 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor.localization; + +import java.util.Locale; + +import javax.servlet.http.HttpServletRequest; + +/** + * An interface for user locale resolution. + *

+ * Note: You are free to implement this interface the way you + * need it, in other words your return values can be global, regardless of the + * request, or on a per-request basis. + *

+ * @version $Id$ + */ +public interface LocaleResolver { + + /** + * Returns the locale of a given request. + * + * @param request + * the current request instance + * @return the locale of the request, null if the locale + * couldn't be resolved + */ + public Locale resolveLocale(final HttpServletRequest request); + +} \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/localization/LocalizedMessages.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/localization/LocalizedMessages.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/localization/LocalizedMessages.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,316 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor.localization; + +import java.io.BufferedInputStream; +import java.io.InputStream; +import java.text.MessageFormat; +import java.util.Collections; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; +import java.util.Properties; +import java.util.ResourceBundle; + +import javax.servlet.http.HttpServletRequest; + +import net.fckeditor.handlers.PropertiesLoader; +import net.fckeditor.tool.Utils; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Provides access to localized messages (properties). + *

+ * Localized messages are loaded for a particular locale from a HTTP request. + * The locale is resolved by the current {@link LocaleResolver} + * instance/singleton. If a locale or a bundle for a locale cannot be found, + * default messages are used. + *

+ *

+ * Note: Loaded messages are cached per locale, any subsequent call of the same + * locale will be served by the cache instead of another resource bundle + * retrieval. + *

+ * + * @version $Id$ + */ +public class LocalizedMessages { + + private static final Map prototypes = Collections + .synchronizedMap(new HashMap()); + private static final String DEFAULT_FILENAME = "default_messages.properties"; //$NON-NLS-1$ + private static final String LOCAL_PROPERTIES = "fckeditor_messages"; //$NON-NLS-1$ + private static final Properties defaultProperties = new Properties(); + + private Properties properties; + private static LocaleResolver localeResolver; + private static final Locale NEUTRAL = new Locale(Utils.EMPTY_STRING); //$NON-NLS-1$ + private static final Logger logger = LoggerFactory + .getLogger(LocalizedMessages.class); + + static { + + InputStream in = LocalizedMessages.class + .getResourceAsStream(DEFAULT_FILENAME); + + if (in == null) { + logger.error("{} not found", DEFAULT_FILENAME); //$NON-NLS-1$ + throw new RuntimeException(DEFAULT_FILENAME + " not found"); //$NON-NLS-1$ + } else { + if (!(in instanceof BufferedInputStream)) + in = new BufferedInputStream(in); + + try { + defaultProperties.load(in); + in.close(); + logger.debug("{} loaded", DEFAULT_FILENAME); //$NON-NLS-1$ + } catch (Exception e) { + logger.error("Error while loading {}", DEFAULT_FILENAME); //$NON-NLS-1$ + throw new RuntimeException( + "Error while loading " + DEFAULT_FILENAME, e); //$NON-NLS-1$ + } + } + } + + /** + * Returns an instance of LocalizedMessages for a given + * request. This method automatically determines the locale of this request + * and loads the appropriate bundle. If locale is null or not available, + * the default locale will be used. + * + * @param request + * the current request instance + * @return instance with localized messages + */ + public static LocalizedMessages getInstance(HttpServletRequest request) { + + if (request == null) + throw new NullPointerException("the request cannot be null"); + + Locale locale = getLocaleResolverInstance().resolveLocale(request); + + if (locale == null) + locale = NEUTRAL; + + synchronized (LocalizedMessages.class) { + if (!prototypes.containsKey(locale)) + prototypes.put(locale, new LocalizedMessages(locale)); + } + + // for now we don't need any cloning since the values are accessed + // read-only + return prototypes.get(locale); + + } + + /** + * Returns the locale resolver instance. The implementation class name is + * provided by {@link PropertiesLoader#getLocaleResolverImpl()}. + * + * @return the locale resolver instance + */ + private synchronized static LocaleResolver getLocaleResolverInstance() { + + if (localeResolver == null) { + String className = PropertiesLoader.getLocaleResolverImpl(); + + if (Utils.isEmpty(className)) + logger.error("Empty LocaleResolver implementation class name provided"); //$NON-NLS-1$ + else + try { + Class clazz = Class.forName(className); + localeResolver = (LocaleResolver) clazz.newInstance(); + logger.info("LocaleResolver initialized to {}", className); //$NON-NLS-1$ + } catch (Throwable e) { + logger.error("LocaleResolver implementation {} could not be instantiated", className); //$NON-NLS-1$ + throw new RuntimeException("LocaleResolver implementation " + className + " could not be instantiated", e); //$NON-NLS-1$ + } + } + + return localeResolver; + } + + /** + * Loads the localized messages for the given locale. This constructor loads + * the resource bundle for this locale and only for this, in other words it + * short-circuits the default resource bundle load mechanism in order to + * prevent the loading of the system default locale which may result in a + * completely different resource bundle. + * + * @param locale + * the locale of the new localized messages + */ + private LocalizedMessages(Locale locale) { + + properties = new Properties(defaultProperties); + + ResourceBundle localized = null; + try { + localized = ResourceBundle.getBundle(LOCAL_PROPERTIES, locale, + Thread.currentThread().getContextClassLoader()); + } catch (Exception e) { + ; // do nothing + } + + if (localized != null + && localized.getLocale().getLanguage().equals( + locale.getLanguage())) { + Enumeration keys = localized.getKeys(); + + while (keys.hasMoreElements()) { + String key = keys.nextElement(); + properties.setProperty(key, localized.getString(key)); + } + + logger.debug("Resource bundle for locale '{}' loaded", locale); //$NON-NLS-1$ + } else { + logger.debug("No resource bundle for locale '{}' found, loading default bundle", locale); //$NON-NLS-1$ + + ResourceBundle base = null; + try { + base = ResourceBundle.getBundle(LOCAL_PROPERTIES, NEUTRAL, + Thread.currentThread().getContextClassLoader()); + } catch (Exception e) { + ; // do nothing + } + + if (base != null && base.getLocale().equals(NEUTRAL)) { + Enumeration keys = base.getKeys(); + + while (keys.hasMoreElements()) { + String key = keys.nextElement(); + properties.setProperty(key, base.getString(key)); + } + } + + } + + } + + /** + * Searches for the message with the specified key in this message list. + * + * @see Properties#getProperty(String) + */ + private String getMessage(String key) { + return properties.getProperty(key); + } + + /** Returns localized editor.compatibleBrowser.yes property. */ + public String getCompatibleBrowserYes() { + return getMessage("editor.compatibleBrowser.yes"); //$NON-NLS-1$ + } + + /** Returns localized editor.compatibleBrowser.no property. */ + public String getCompatibleBrowserNo() { + return getMessage("editor.compatibleBrowser.no"); //$NON-NLS-1$ + } + + /** Returns localized connector.fileUpload.enabled property. */ + public String getFileUploadEnabled() { + return getMessage("connector.fileUpload.enabled"); //$NON-NLS-1$ + } + + /** Returns localized connector.fileUpload.disabled property. */ + public String getFileUploadDisabled() { + return getMessage("connector.fileUpload.disabled"); //$NON-NLS-1$ + } + + /** + * Returns localized connector.file_renamed_warning property. + * + * @param newFileName + * the new filename of the warning + * @return localized message with new filename + */ + public String getFileRenamedWarning(String newFileName) { + return MessageFormat.format(getMessage("connector.fileUpload.file_renamed_warning"), newFileName); //$NON-NLS-1$ + } + + /** Returns localized connector.fileUpload.invalid_file_type_specified property. */ + public String getInvalidFileTypeSpecified() { + return getMessage("connector.fileUpload.invalid_file_type_specified"); //$NON-NLS-1$ + } + + /** Returns localized connector.fileUpload.write_error property. */ + public String getFileUploadWriteError() { + return getMessage("connector.fileUpload.write_error"); //$NON-NLS-1$ + } + + /** Returns localized connector.getResources.enabled property. */ + public String getGetResourcesEnabled() { + return getMessage("connector.getResources.enabled"); //$NON-NLS-1$ + } + + /** Returns localized connector.getResources.disabled property. */ + public String getGetResourcesDisabled() { + return getMessage("connector.getResources.disabled"); //$NON-NLS-1$ + } + + /** Returns localized connector.getResources.read_error property. */ + public String getGetResourcesReadError() { + return getMessage("connector.getResources.read_error"); //$NON-NLS-1$ + } + + /** Returns localized connector.createFolder.enabled property. */ + public String getCreateFolderEnabled() { + return getMessage("connector.createFolder.enabled"); //$NON-NLS-1$ + } + + /** Returns localized connector.createFolder.disabled property. */ + public String getCreateFolderDisabled() { + return getMessage("connector.createFolder.disabled"); //$NON-NLS-1$ + } + + /** Returns localized connector.invalid_command_specified property. */ + public String getInvalidCommandSpecified() { + return getMessage("connector.invalid_command_specified"); //$NON-NLS-1$ + } + + /** Returns localized connector.createFolder.folder_already_exists_error property. */ + public String getFolderAlreadyExistsError() { + return getMessage("connector.createFolder.folder_already_exists_error"); //$NON-NLS-1$ + } + + /** Returns localized connector.createFolder.invalid_new_folder_name_specified property. */ + public String getInvalidNewFolderNameSpecified() { + return getMessage("connector.createFolder.invalid_new_folder_name_specified"); //$NON-NLS-1$ + } + + /** Returns localized connector.createFolder.write_error property. */ + public String getCreateFolderWriteError() { + return getMessage("connector.createFolder.write_error"); //$NON-NLS-1$ + } + + /** Returns localized connector.invalid_resource_type_specified property. */ + public String getInvalidResouceTypeSpecified() { + return getMessage("connector.invalid_resource_type_specified"); //$NON-NLS-1$ + } + + /** Returns localized connector.invalid_current_folder_specified property. */ + public String getInvalidCurrentFolderSpecified() { + return getMessage("connector.invalid_current_folder_specified"); //$NON-NLS-1$ + } + +} \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/localization/impl/AcceptLanguageHeaderResolver.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/localization/impl/AcceptLanguageHeaderResolver.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/localization/impl/AcceptLanguageHeaderResolver.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,48 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor.localization.impl; + +import java.util.Locale; + +import javax.servlet.ServletRequest; +import javax.servlet.http.HttpServletRequest; + +import net.fckeditor.localization.LocaleResolver; +import net.fckeditor.tool.Utils; + +/** + * HTTP header implementation of the locale resolver. It resolves the current + * user locale by calling {@link ServletRequest#getLocale()} if and only if the + * Accept-Language header is not empty. + * + * @version $Id$ + */ +public class AcceptLanguageHeaderResolver implements LocaleResolver { + + public Locale resolveLocale(final HttpServletRequest request) { + + if (Utils.isNotEmpty(request.getHeader("Accept-Language"))) + return request.getLocale(); + else + return null; + } + +} \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/localization/impl/JstlResolver.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/localization/impl/JstlResolver.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/localization/impl/JstlResolver.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,47 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor.localization.impl; + +import java.util.Locale; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.jsp.jstl.core.Config; + +import net.fckeditor.localization.LocaleResolver; + +/** + * JSTL implementation of the locale resolver. It resolves the locale against + * the user session. + * + * @version $Id$ + */ +public class JstlResolver implements LocaleResolver { + + public JstlResolver() { + Config.class.hashCode(); + } + + public Locale resolveLocale(final HttpServletRequest request) { + + return (Locale) Config.get(request.getSession(), Config.FMT_LOCALE); + } + +} \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/localization/impl/package-info.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/localization/impl/package-info.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/localization/impl/package-info.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,27 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ + +/** + * Default implementations for the locale resolver interface. + * + * @version $Id$ + */ +package net.fckeditor.localization.impl; \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/localization/package-info.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/localization/package-info.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/localization/package-info.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,27 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ + +/** + * Interfaces and classes for the locale resolution and localized messages. + * + * @version $Id$ + */ +package net.fckeditor.localization; \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/package-info.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/package-info.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/package-info.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,27 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ + +/** + * Core objects to manage the FCKeditor text input form. + * + * @version $Id$ + */ +package net.fckeditor; \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/requestcycle/Context.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/requestcycle/Context.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/requestcycle/Context.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,142 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor.requestcycle; + +import javax.servlet.http.HttpServletRequest; + +import net.fckeditor.connector.Dispatcher; +import net.fckeditor.handlers.Command; +import net.fckeditor.handlers.ResourceType; +import net.fckeditor.tool.Utils; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Maintains base/common request parameters from the File Browser. The gain of + * this class is to provide abstracted and pre-processed access to common + * request parameters. + *

+ * In the regular case, you will use an already created instance of this class. + *

+ * + * @version $Id$ + */ +public class Context { + // This is just a helper class which has no relevance for the logger + private static final Logger logger = LoggerFactory.getLogger(Dispatcher.class); + + private String typeStr; + private String commandStr; + private String currentFolderStr; + + /** + * Sole class constructor. Takes in a request instance, processes parameters + * and populates private fields which can be accessed through getters.
+ * This class will only be instantiated in {@link ThreadLocalData}. + * + * @param request + * current user request instance + */ + protected Context(final HttpServletRequest request) { + commandStr = request.getParameter("Command"); + typeStr = request.getParameter("Type"); + currentFolderStr = request.getParameter("CurrentFolder"); + + // if this is a QuickUpload request, 'commandStr', 'currentFolderStr' + // are empty and 'typeStr' maybe empty too + if (Utils.isEmpty(commandStr) && Utils.isEmpty(currentFolderStr)) { + commandStr = "QuickUpload"; + currentFolderStr = "/"; + if (Utils.isEmpty(typeStr)) + typeStr = "File"; + } + + // checks to meet specs in http://docs.fckeditor.net/FCKeditor_2.x/Developers_Guide/Server_Side_Integration#File_Browser_Requests + if (currentFolderStr != null && !currentFolderStr.startsWith("/")) + currentFolderStr = "/".concat(currentFolderStr); + } + + /** + * Returns the type parameter of this context. + * + * @return the type parameter of this context + */ + public String getTypeStr() { + return typeStr; + } + + /** + * Returns a default resource type instance for the type parameter. + * + * @see ResourceType#getDefaultResourceType(String) + * @return default resource type instance + */ + public ResourceType getDefaultResourceType() { + return ResourceType.getDefaultResourceType(typeStr); + } + + /** + * Returns a resource type instance for the type parameter. + * + * @see ResourceType#getResourceType(String) + * @return resource type instance + */ + public ResourceType getResourceType() { + return ResourceType.getResourceType(typeStr); + } + + /** + * Returns the command parameter of this context. + * + * @return the command parameter of this context + */ + public String getCommandStr() { + return commandStr; + } + + /** + * Returns a command instance for the command parameter. + * + * @see Command#getCommand(String) + * @return command instance + */ + public Command getCommand() { + return Command.getCommand(commandStr); + } + + /** + * Returns the current folder parameter of this context. + * + * @return the current folder parameter of this context + */ + public String getCurrentFolderStr() { + return currentFolderStr; + } + + /** Logs base/common request parameters. */ + public void logBaseParameters() { + logger.debug("Parameter Command: {}", commandStr); + logger.debug("Parameter Type: {}", typeStr); + logger.debug("Parameter CurrentFolder: {}", currentFolderStr); + } + +} Index: 3rdParty_sources/ckeditor/net/fckeditor/requestcycle/ThreadLocalData.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/requestcycle/ThreadLocalData.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/requestcycle/ThreadLocalData.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,78 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor.requestcycle; + +import javax.servlet.http.HttpServletRequest; + +/** + * Maintains current {@link Context context} and {@link HttpServletRequest + * request} instances. This container relies on {@link ThreadLocal} and provides + * static access to the aforementioned objects for the current File Browse + * request. This means that this class is thread-safe. + * + * @version $Id$ + */ +public class ThreadLocalData { + private static ThreadLocal request = new ThreadLocal(); + private static ThreadLocal context = new ThreadLocal(); + + /** + * Initializes the current request cycle. + * + * @param request + * current user request instance + */ + public static void beginRequest(final HttpServletRequest request) { + if (request == null) + throw new NullPointerException("the request cannot be null"); + ThreadLocalData.request.set(request); + ThreadLocalData.context.set(new Context(request)); + } + + /** + * Returns the current user request instance. + * + * @return the current user request instance + */ + public static HttpServletRequest getRequest() { + return request.get(); + } + + /** + * Returns the current context instance. + * + * @return the current context instance + */ + public static Context getContext() { + return context.get(); + } + + /** + * Terminates the current request cycle.
+ * Important: To prevent memory leaks, make sure that this + * method is called at the end of the current request cycle! + */ + public static void endRequest() { + // ThreadLocal#remove is not available in Java 1.4 + request.set(null); + context.set(null); + } +} Index: 3rdParty_sources/ckeditor/net/fckeditor/requestcycle/UserAction.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/requestcycle/UserAction.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/requestcycle/UserAction.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,79 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor.requestcycle; + +import javax.servlet.http.HttpServletRequest; + +import net.fckeditor.handlers.Command; + +/** + * An interface for user action control. In particular, this interface gives + * you fine-grained control over the File Browser {@link Command commands}. + *

+ * Note: You are free to implement this interface the way you + * need it, in other words your return values can be global, regardless of the + * request, or on a per-request basis. + *

+ * + * @version $Id$ + */ +public interface UserAction { + + /** + * Checks if file upload is enabled/allowed. This method maps to + * {@link Command#FILE_UPLOAD FileUpload} and {@link Command#QUICK_UPLOAD + * QuickUpload}.
+ * Note: This method may be renamed to {@code + * isFileUploadEnabled} in future versions. + * + * @param request + * current user request instance + * @return {@code true} if file upload is enabled/allowed, else {@code + * false} + */ + public boolean isEnabledForFileUpload(final HttpServletRequest request); + + /** + * Checks if resource retrieval/listing is enabled/allowed. This method maps + * to {@link Command#GET_FOLDERS GetFolders} and + * {@link Command#GET_FOLDERS_AND_FILES GetFoldersAndFiles}.
+ * Note: This method may be renamed to {@code + * isGetResourcesEnabled} in future versions. + * + * @param request + * current user request instance + * @return {@code true} if resource retrieval/listing is enabled/allowed, + * else {@code false} + */ + public boolean isEnabledForFileBrowsing(final HttpServletRequest request); + + /** + * Checks if folder creation is enabled/allowed. This method maps to + * {@link Command#CREATE_FOLDER CreateFolder}. + * + * @param request + * current user request instance + * @return {@code true} if folder creation is enabled/allowed, else {@code + * false} + */ + public boolean isCreateFolderEnabled(final HttpServletRequest request); + +} \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/requestcycle/UserPathBuilder.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/requestcycle/UserPathBuilder.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/requestcycle/UserPathBuilder.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,64 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor.requestcycle; + +import javax.servlet.http.HttpServletRequest; + +/** + * An interface for userfiles path construction. In particular, this interface + * gives you the ability to construct the {@code connector.userFilesPath} and + * {@code connector.userFilesAbsolutePath} properties dynamically. See configuration for more + * details. + *

+ * Note: You are free to implement this interface the way you + * need it, in other words your return values can be global, regardless of the + * request, or on a per-request basis. + *

+ * + * @version $Id$ + */ +public interface UserPathBuilder { + + /** + * Returns the constructed server-side userfiles absolute path. This method + * is the dynamic constructor of the {@code connector.userFilesAbsolutePath} + * property. A concrete connector implementation will use this value to + * resolve the server-side location of resources. + * + * @param request + * current user request instance + * @return the constructed server-side userfiles absolute path + */ + public String getUserFilesAbsolutePath(final HttpServletRequest request); + + /** + * Returns the constructed client-side userfiles path. This method is the + * dynamic constructor of the {@code connector.userFilesPath} property. A + * browser will use this value to resolve the url-side location of resources + * on the server. + * + * @param request + * current user request instance + * @return the constructed client-side userfiles path + */ + public String getUserFilesPath(final HttpServletRequest request); +} Index: 3rdParty_sources/ckeditor/net/fckeditor/requestcycle/impl/ContextPathBuilder.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/requestcycle/impl/ContextPathBuilder.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/requestcycle/impl/ContextPathBuilder.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,40 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor.requestcycle.impl; + +import javax.servlet.http.HttpServletRequest; + +/** + * UserPathBuilder implementation which always returns static userfiles paths + * with prepended context path. In particular it returns the {@code + * connector.userFiles*Path} properties and prepend the current context path to + * {@link #getUserFilesPath(HttpServletRequest)} only. + * + * @version $Id$ + */ +public class ContextPathBuilder extends ServerRootPathBuilder { + + @Override + public String getUserFilesPath(final HttpServletRequest request) { + return request.getContextPath().concat(super.getUserFilesPath(request)); + } + +} \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/requestcycle/impl/DisabledUserAction.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/requestcycle/impl/DisabledUserAction.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/requestcycle/impl/DisabledUserAction.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,45 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor.requestcycle.impl; + +import javax.servlet.http.HttpServletRequest; + +import net.fckeditor.requestcycle.UserAction; + +/** + * UserAction implementation which always returns {@code false}. + * + * @version $Id$ + */ +public class DisabledUserAction implements UserAction { + + public boolean isEnabledForFileBrowsing(final HttpServletRequest request) { + return false; + } + + public boolean isEnabledForFileUpload(final HttpServletRequest request) { + return false; + } + + public boolean isCreateFolderEnabled(final HttpServletRequest request) { + return false; + } +} \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/requestcycle/impl/EnabledUserAction.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/requestcycle/impl/EnabledUserAction.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/requestcycle/impl/EnabledUserAction.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,45 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor.requestcycle.impl; + +import javax.servlet.http.HttpServletRequest; + +import net.fckeditor.requestcycle.UserAction; + +/** + * UserAction implementation which always returns {@code true}. + * + * @version $Id$ + */ +public class EnabledUserAction implements UserAction { + + public boolean isEnabledForFileBrowsing(final HttpServletRequest request) { + return true; + } + + public boolean isEnabledForFileUpload(final HttpServletRequest request) { + return true; + } + + public boolean isCreateFolderEnabled(final HttpServletRequest request) { + return true; + } +} \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/requestcycle/impl/ServerRootPathBuilder.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/requestcycle/impl/ServerRootPathBuilder.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/requestcycle/impl/ServerRootPathBuilder.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,45 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor.requestcycle.impl; + +import javax.servlet.http.HttpServletRequest; + +import net.fckeditor.handlers.PropertiesLoader; +import net.fckeditor.requestcycle.UserPathBuilder; + +/** + * UserPathBuilder implementation which always returns static userfiles paths. + * In particular it returns the {@code connector.userFiles*Path} properties + * as-is. + * + * @version $Id$ + */ +public class ServerRootPathBuilder implements UserPathBuilder { + + public String getUserFilesAbsolutePath(final HttpServletRequest request) { + return PropertiesLoader.getUserFilesAbsolutePath(); + } + + public String getUserFilesPath(final HttpServletRequest request) { + return PropertiesLoader.getUserFilesPath(); + } + +} \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/requestcycle/impl/UserActionImpl.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/requestcycle/impl/UserActionImpl.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/requestcycle/impl/UserActionImpl.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,60 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor.requestcycle.impl; + +import javax.servlet.http.HttpServletRequest; + +import net.fckeditor.requestcycle.UserAction; + +/** + * Standard implementation for {@link UserAction}. It always returns + * true.
+ * + * @see EnabledUserAction + * @version $Id$ + * @deprecated Class will be removed in FCKeditor.Java 2.6, functionality now + * served by {@link EnabledUserAction}. + */ +@Deprecated +public class UserActionImpl implements UserAction { + + /* (non-Javadoc) + * @see net.fckeditor.requestcycle.UserAction#isEnabledForFileBrowsing(javax.servlet.http.HttpServletRequest) + */ + public boolean isEnabledForFileBrowsing(final HttpServletRequest request) { + return true; + } + + /* (non-Javadoc) + * @see net.fckeditor.requestcycle.UserAction#isEnabledForFileUpload(javax.servlet.http.HttpServletRequest) + */ + public boolean isEnabledForFileUpload(final HttpServletRequest request) { + return true; + } + + /* + * (non-Javadoc) + * @see net.fckeditor.requestcycle.UserAction#isEnabledForFolderCreation(javax.servlet.http.HttpServletRequest) + */ + public boolean isCreateFolderEnabled(final HttpServletRequest request) { + return true; + } +} Index: 3rdParty_sources/ckeditor/net/fckeditor/requestcycle/impl/package-info.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/requestcycle/impl/package-info.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/requestcycle/impl/package-info.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,27 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ + +/** + * Default implementations for the request life cycle interfaces. + * + * @version $Id$ + */ +package net.fckeditor.requestcycle.impl; \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/requestcycle/package-info.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/requestcycle/package-info.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/requestcycle/package-info.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,34 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ + +/** + * Supplemental request life cycle interfaces and classes for the + * {@link net.fckeditor.connector connector} package. They are essential to + * control user actions and userfiles path. + *

+ * The sequence diagram below depicts the interaction between interfaces and + * classes:
+ * Request Life Cycle Diagram + *

+ * @version $Id$ + */ +package net.fckeditor.requestcycle; \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/response/GetResponse.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/response/GetResponse.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/response/GetResponse.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,345 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor.response; + +import java.io.StringWriter; +import java.util.List; +import java.util.Map; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; + +import net.fckeditor.connector.Connector; +import net.fckeditor.handlers.Command; +import net.fckeditor.handlers.ResourceType; +import net.fckeditor.localization.LocalizedMessages; +import net.fckeditor.requestcycle.ThreadLocalData; +import net.fckeditor.tool.Utils; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +/** + * Represents the XML response for the File Browser GET + * requests. + * + * @version $Id$ + */ +public class GetResponse { + + /** Underlying DOM document */ + protected Document document; + /** Error element, in case of an invalid request */ + protected Element errorElement; + /** Folders element, in case of a GetResources request */ + protected Element foldersElement; + /** Files element, in case of a GetResources request */ + protected Element filesElement; + + /** Error number OK */ + public static final int EN_OK = 0; + + /** Error number CUSTOM ERROR */ + public static final int EN_CUSTOM_ERROR = 1; + + /** Error number FOLDER ALREADY EXISTS */ + public static final int EN_FOLDER_ALREADY_EXISTS_ERROR = 101; + + /** Error number INVALID NEW FOLDER NAME */ + public static final int EN_INVALID_NEW_FOLDER_NAME_ERROR = 102; + + /** Error number SECURITY ERROR */ + public static final int EN_CREATE_FOLDER_SECURITY_ERROR = 103; + + /** Error number UNKNOWN ERROR */ + public static final int EN_UKNOWN_CREATE_FOLDER_ERROR = 110; + + /** + * Constructs a response with a specific error number and message. + * + * @param number + * the error number of the new get response + * @param message + * the specific message of the new get response + * @throws RuntimeException + * if creation of the underlying DOM document failed + */ + public GetResponse(int number, String message) { + try { + DocumentBuilderFactory factory = DocumentBuilderFactory + .newInstance(); + DocumentBuilder builder = factory.newDocumentBuilder(); + document = builder.newDocument(); + } catch (ParserConfigurationException e) { + throw new RuntimeException(e); + } + + Element root = document.createElement("Connector"); + document.appendChild(root); + setError(number, message); + } + + /** + * Constructs a successful response for a specific command and resource + * type. + * + * @param command + * the current command of the new get response + * @param type + * the current resource type of the new get response + * @param currentFolder + * the current folder of the new get response + * @param constructedUrl + * the final URL of the new get response + * @throws RuntimeException + * if creation of the underlying DOM document failed + */ + public GetResponse(Command command, ResourceType type, + String currentFolder, String constructedUrl) { + + try { + DocumentBuilderFactory factory = DocumentBuilderFactory + .newInstance(); + DocumentBuilder builder = factory.newDocumentBuilder(); + document = builder.newDocument(); + } catch (ParserConfigurationException e) { + throw new RuntimeException(e); + } + + Element root = document.createElement("Connector"); + document.appendChild(root); + root.setAttribute("command", command.getName()); + root.setAttribute("resourceType", type.getName()); + + Element currentFolderElement = document.createElement("CurrentFolder"); + currentFolderElement.setAttribute("path", currentFolder); + + currentFolderElement.setAttribute("url", constructedUrl); + root.appendChild(currentFolderElement); + + } + + /** + * Constructs a response with a specific error number only. + * + * @param number + * the error number of the new get response + * @throws RuntimeException + * if creation of the underlying DOM document failed + */ + public GetResponse(int number) { + this(number, null); + } + + /** + * Sets the error number and specific message of this get response. + * + * @param number + * the error number of this get response + * @param message + * the specific message of this get response + */ + public void setError(int number, String message) { + + if (errorElement == null) { + errorElement = document.createElement("Error"); + document.getDocumentElement().appendChild(errorElement); + } + + errorElement.setAttribute("number", String.valueOf(number)); + if (Utils.isNotEmpty(message)) + errorElement.setAttribute("text", message); + + } + + /** + * Sets the error number of this get response. + * + * @param number + * the error number of this get response + */ + public void setError(int number) { + setError(number, null); + } + + /** + * Sets the folders of this get response. + * + * @see Connector#getFolders(ResourceType, String) + * @param folders + * the folders of this get response + */ + public void setFolders(final List folders) { + if (foldersElement != null) { + Element parent = (Element) foldersElement.getParentNode(); + parent.removeChild(foldersElement); + } + + foldersElement = document.createElement("Folders"); + document.getDocumentElement().appendChild(foldersElement); + + for (String folder : folders) { + Element folderElement = document.createElement("Folder"); + folderElement.setAttribute("name", folder); + foldersElement.appendChild(folderElement); + } + } + + /** + * Sets the folders of this get response. + * + * @see Connector#getFiles(ResourceType, String) + * @param files + * the files of this get response + */ + public void setFiles(final List> files) { + if (filesElement != null) { + Element parent = (Element) filesElement.getParentNode(); + parent.removeChild(filesElement); + } + + filesElement = document.createElement("Files"); + document.getDocumentElement().appendChild(filesElement); + + long length = 1L; + long tempLength; + + for (Map file : files) { + Element fileElement = document.createElement("File"); + fileElement.setAttribute("name", (String) file + .get(Connector.KEY_NAME)); + tempLength = ((Number) file.get(Connector.KEY_SIZE)).longValue(); + if (tempLength > 1024L) + length = tempLength / 1024L; + fileElement.setAttribute("size", String.valueOf(length)); + filesElement.appendChild(fileElement); + } + } + + /** + * Creates the XML representation of this get response. The underlying DOM + * document will transformed to a string. + * + * @throws RuntimeException + * if creation failed + * @return XML representation of this get response + */ + @Override + public String toString() { + document.getDocumentElement().normalize(); + TransformerFactory factory = TransformerFactory.newInstance(); + + StringWriter sw = new StringWriter(); + + try { + Transformer transformer = factory.newTransformer(); + + DOMSource source = new DOMSource(document); + StreamResult result = new StreamResult(sw); + + transformer.transform(source, result); + } catch (TransformerException e) { + throw new RuntimeException(e); + } + + return sw.toString(); + } + + /** Creates an OK response. */ + public static GetResponse getOK() { + return new GetResponse(EN_OK); + } + + /** Creates an INVALID COMMAND error. */ + public static GetResponse getInvalidCommandError() { + LocalizedMessages lm = LocalizedMessages.getInstance(ThreadLocalData + .getRequest()); + return new GetResponse(EN_CUSTOM_ERROR, lm.getInvalidCommandSpecified()); + } + + /** Creates an INVALID RESOURCE TYPE error. */ + public static GetResponse getInvalidResourceTypeError() { + LocalizedMessages lm = LocalizedMessages.getInstance(ThreadLocalData + .getRequest()); + return new GetResponse(EN_CUSTOM_ERROR, lm + .getInvalidResouceTypeSpecified()); + } + + /** Creates an INVALID CURRENT FOLDER error. */ + public static GetResponse getInvalidCurrentFolderError() { + LocalizedMessages lm = LocalizedMessages.getInstance(ThreadLocalData + .getRequest()); + return new GetResponse(EN_CUSTOM_ERROR, lm + .getInvalidCurrentFolderSpecified()); + } + + /** Creates a GET RESOURCES DISABLED error. */ + public static GetResponse getGetResourcesDisabledError() { + LocalizedMessages lm = LocalizedMessages.getInstance(ThreadLocalData + .getRequest()); + return new GetResponse(EN_CUSTOM_ERROR, lm.getGetResourcesDisabled()); + } + + /** Creates a GET RESOURCES READ error. */ + public static GetResponse getGetResourcesReadError() { + LocalizedMessages lm = LocalizedMessages.getInstance(ThreadLocalData + .getRequest()); + return new GetResponse(EN_CUSTOM_ERROR, lm.getGetResourcesReadError()); + } + + /** Creates a CREATE FOLDER DISABLED error. */ + public static GetResponse getCreateFolderDisabledError() { + LocalizedMessages lm = LocalizedMessages.getInstance(ThreadLocalData + .getRequest()); + return new GetResponse(EN_CUSTOM_ERROR, lm.getCreateFolderDisabled()); + } + + /** Creates an INVALID NEW FOLDER NAME error. */ + public static GetResponse getInvalidNewFolderNameError() { + LocalizedMessages lm = LocalizedMessages.getInstance(ThreadLocalData + .getRequest()); + return new GetResponse(EN_INVALID_NEW_FOLDER_NAME_ERROR, lm + .getInvalidNewFolderNameSpecified()); + } + + /** Creates a FOLDER ALREADY EXISTS error. */ + public static GetResponse getFolderAlreadyExistsError() { + LocalizedMessages lm = LocalizedMessages.getInstance(ThreadLocalData + .getRequest()); + return new GetResponse(EN_FOLDER_ALREADY_EXISTS_ERROR, lm + .getFolderAlreadyExistsError()); + } + + /** Creates a CREATE FOLDER WRITE error. */ + public static GetResponse getCreateFolderWriteError() { + LocalizedMessages lm = LocalizedMessages.getInstance(ThreadLocalData + .getRequest()); + return new GetResponse(EN_UKNOWN_CREATE_FOLDER_ERROR, lm + .getCreateFolderWriteError()); + } +} \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/response/UploadResponse.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/response/UploadResponse.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/response/UploadResponse.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,222 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor.response; + +import net.fckeditor.localization.LocalizedMessages; +import net.fckeditor.requestcycle.ThreadLocalData; +import net.fckeditor.tool.Utils; + +/** + * Represents the HTML/JS response for the File Browser POST + * requests. + *

+ * This class utilizes varags to reflect the JavaScript callback function in an + * optimal way. However, varargs can be tricky. You can always omit passed + * parameters from right to left but any violation may result in an exception or + * a failed callback. + *

+ *

+ * For example: window.parent.OnUploadCompleted(101,'some/url/file.img','file.img','no error') can be mapped with + * + * UploadResponse ur = new UploadResponse(SC_SOME_ERROR,"/some/url/file.img","file.img","no error") + * . + *

+ *

+ * But window.parent.OnUploadCompleted(101,'some/url/file.img','no error') is an illegal callback and + * will fail. + *

+ * + * @version $Id$ + */ +public class UploadResponse { + + /** JavaScript callback parameters */ + protected Object[] parameters; + + /** Error number OK */ + public static final int EN_OK = 0; + + /** Error number CUSTOM ERROR */ + public static final int EN_CUSTOM_ERROR = 1; + + /** Error number CUSTOM WARNING */ + public static final int EN_CUSTOM_WARNING = 101; + + /** Error number FILE RENAMED WARNING */ + public static final int EN_FILE_RENAMED_WARNING = 201; + + /** Error number INVALID FILE TYPE */ + public static final int EN_INVALID_FILE_TYPE_ERROR = 202; + + /** Error number SECURITY ERROR */ + public static final int EN_SECURITY_ERROR = 203; + + /** + * Constructs a response with a varying amount of arguments. + *

+ * Use the predefined error numbers or upload responses, if possible. If you + * need to set error number and message only, use this constructor with the + * first argument only and call + * {@link UploadResponse#setCustomMessage(String)}. + *

+ * + * @param arguments + * possible argument order: + * int errorNumber, String fileUrl, String filename, String customMessage + * . Omit from right to left. + * @throws IllegalArgumentException + * if amount of arguments is less than 1 and above 4 + * @throws IllegalArgumentException + * if the first argument is not an error number (int) + */ + public UploadResponse(Object... arguments) { + if (arguments.length < 1 || arguments.length > 4) + throw new IllegalArgumentException( + "The amount of arguments has to be between 1 and 4"); + + parameters = new Object[arguments.length]; + + if (!(arguments[0] instanceof Integer)) + throw new IllegalArgumentException( + "The first argument has to be an error number (int)"); + + System.arraycopy(arguments, 0, parameters, 0, arguments.length); + } + + /** + * Sets the custom message of this upload response. + * + * Methods automatically determines how many arguments are set and puts the + * message at the end. + * + * @param customMassage + * the custom message of this upload response + */ + public void setCustomMessage(final String customMassage) { + if (Utils.isNotEmpty(customMassage)) { + if (parameters.length == 1) { + Object errorNumber = parameters[0]; + parameters = new Object[4]; + parameters[0] = errorNumber; + parameters[1] = null; + parameters[2] = null; + } + parameters[3] = customMassage; + } + } + + /** Creates an OK response. */ + public static UploadResponse getOK(String fileUrl) { + return new UploadResponse(EN_OK, fileUrl); + } + + /** Creates a FILE RENAMED warning. */ + public static UploadResponse getFileRenamedWarning(String fileUrl, + String newFileName) { + LocalizedMessages lm = LocalizedMessages.getInstance(ThreadLocalData + .getRequest()); + return new UploadResponse(EN_FILE_RENAMED_WARNING, fileUrl, + newFileName, lm.getFileRenamedWarning(newFileName)); + } + + /** Creates a INVALID FILE TYPE error. */ + public static UploadResponse getInvalidFileTypeError() { + LocalizedMessages lm = LocalizedMessages.getInstance(ThreadLocalData + .getRequest()); + return new UploadResponse(EN_INVALID_FILE_TYPE_ERROR, lm + .getInvalidFileTypeSpecified()); + } + + /** Creates a INVALID COMMAND error. */ + public static UploadResponse getInvalidCommandError() { + LocalizedMessages lm = LocalizedMessages.getInstance(ThreadLocalData + .getRequest()); + return new UploadResponse(EN_CUSTOM_ERROR, null, null, lm + .getInvalidCommandSpecified()); + } + + /** Creates a INVALID RESOURCE TYPE error. */ + public static UploadResponse getInvalidResourceTypeError() { + LocalizedMessages lm = LocalizedMessages.getInstance(ThreadLocalData + .getRequest()); + return new UploadResponse(EN_CUSTOM_ERROR, null, null, lm + .getInvalidResouceTypeSpecified()); + } + + /** Creates a INVALID CURRENT FOLDER error. */ + public static UploadResponse getInvalidCurrentFolderError() { + LocalizedMessages lm = LocalizedMessages.getInstance(ThreadLocalData + .getRequest()); + return new UploadResponse(EN_CUSTOM_ERROR, null, null, lm + .getInvalidCurrentFolderSpecified()); + } + + /** Creates a FILE UPLOAD DISABLED error. */ + public static UploadResponse getFileUploadDisabledError() { + LocalizedMessages lm = LocalizedMessages.getInstance(ThreadLocalData + .getRequest()); + return new UploadResponse(EN_SECURITY_ERROR, null, null, lm + .getFileUploadDisabled()); + } + + /** Creates a FILE UPLOAD WRITE error. */ + public static UploadResponse getFileUploadWriteError() { + LocalizedMessages lm = LocalizedMessages.getInstance(ThreadLocalData + .getRequest()); + return new UploadResponse(EN_CUSTOM_ERROR, null, null, lm + .getFileUploadWriteError()); + } + + /** + * Creates the HTML/JS representation of this upload response. + * + * @return HTML/JS representation of this upload response + */ + @Override + public String toString() { + StringBuffer sb = new StringBuffer(400); + sb.append(""); + + return sb.toString(); + } +} \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/response/package-info.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/response/package-info.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/response/package-info.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,27 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ + +/** + * Response objects for {@code GET} and {@code POST} requests. + * + * @version $Id$ + */ +package net.fckeditor.response; \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/tags/CheckTag.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/tags/CheckTag.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/tags/CheckTag.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,139 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor.tags; + +import java.io.IOException; +import java.util.HashSet; +import java.util.Set; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.jsp.JspException; +import javax.servlet.jsp.JspTagException; +import javax.servlet.jsp.JspWriter; +import javax.servlet.jsp.tagext.TagSupport; + +/*import org.slf4j.Logger; + import org.slf4j.LoggerFactory;*/ + +import net.fckeditor.handlers.RequestCycleHandler; +import net.fckeditor.localization.LocalizedMessages; +import net.fckeditor.tool.Compatibility; + +/** + * Displays information about browser and user capabilities. + *

+ * There are four available commands: + *

    + *
  1. CompatibleBrowser
  2. + *
  3. CreateFolder
  4. + *
  5. FileUpload
  6. + *
  7. GetResources
  8. + *
+ *

+ * Each call will emit a localized message (if available) about the command's + * status. + * + * @version $Id$ + */ +public class CheckTag extends TagSupport { + + private static final long serialVersionUID = -6834095891675681686L; + + private static final String FILE_UPLOAD = "FileUpload"; + private static final String GET_RESOURCES = "GetResources"; + private static final String CREATE_FOLDER = "CreateFolder"; + private static final String COMPATIBLE_BROWSER = "CompatibleBrowser"; + + private static final Set commands = new HashSet(4); + + static { + commands.add(FILE_UPLOAD); + commands.add(COMPATIBLE_BROWSER); + commands.add(GET_RESOURCES); + commands.add(CREATE_FOLDER); + } + + private String command; + + /** + * Sets the desired command. + * + * @param command + * a command to check + * @throws JspTagException + * if the provided command does not exist + */ + public void setCommand(String command) throws JspTagException { + if (!commands.contains(command)) + throw new JspTagException( + "You have to provide one of the following commands: " + + commands); + this.command = command; + } + + @Override + public int doStartTag() throws JspException { + JspWriter out = pageContext.getOut(); + + HttpServletRequest request = (HttpServletRequest) pageContext + .getRequest(); + LocalizedMessages lm = LocalizedMessages.getInstance(request); + String response = null; + + if (command.equals(FILE_UPLOAD)) { + if (RequestCycleHandler.isFileUploadEnabled(request)) + response = lm.getFileUploadEnabled(); + else + response = lm.getFileUploadDisabled(); + } + + if (command.equals(GET_RESOURCES)) { + if (RequestCycleHandler.isGetResourcesEnabled(request)) + response = lm.getGetResourcesEnabled(); + else + response = lm.getGetResourcesDisabled(); + } + + if (command.equals(CREATE_FOLDER)) { + if (RequestCycleHandler.isCreateFolderEnabled(request)) + response = lm.getCreateFolderEnabled(); + else + response = lm.getCreateFolderDisabled(); + } + + if (command.equals(COMPATIBLE_BROWSER)) { + if (Compatibility.isCompatibleBrowser(request)) + response = lm.getCompatibleBrowserYes(); + else + response = lm.getCompatibleBrowserNo(); + } + + try { + out.print(response); + } catch (IOException e) { + throw new JspException( + "Tag response could not be written to the user!", e); + } + + return SKIP_BODY; + } + +} \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/tags/ConfigTag.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/tags/ConfigTag.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/tags/ConfigTag.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,69 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor.tags; + +import java.util.HashMap; +import java.util.Map; + +import javax.servlet.jsp.JspException; +import javax.servlet.jsp.tagext.DynamicAttributes; +import javax.servlet.jsp.tagext.Tag; +import javax.servlet.jsp.tagext.TagSupport; + +import net.fckeditor.FCKeditorConfig; + +/** + * Sets {@link FCKeditorConfig configuration options} in the surrounding editor + * tag only. + * + * @version $Id$ + */ +public class ConfigTag extends TagSupport implements DynamicAttributes { + + private Map params = new HashMap(); + + private static final long serialVersionUID = -5282810094404700422L; + + @Override + public int doStartTag() throws JspException { + + Tag ancestor = findAncestorWithClass(this, EditorTag.class); + if (ancestor == null) + throw new JspException( + "the config tag can only be nested within an editor tag"); + EditorTag editorTag = (EditorTag) ancestor; + + for (Map.Entry option : params.entrySet()) + editorTag.setConfig(option.getKey(), option.getValue()); + + return SKIP_BODY; + } + + /** + * Sets a configuration option. + */ + public void setDynamicAttribute(String arg0, String name, Object value) + throws JspException { + if (value != null) + params.put(name, value.toString()); + } + +} \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/tags/EditorTag.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/tags/EditorTag.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/tags/EditorTag.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,150 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor.tags; + +import java.io.IOException; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.jsp.JspException; +import javax.servlet.jsp.JspWriter; +import javax.servlet.jsp.tagext.TagSupport; + +import net.fckeditor.FCKeditor; +import net.fckeditor.tool.Utils; + +/** + * Tag creates and configures a {@link FCKeditor} instance. The setter methods + * are the same as in the FCKeditor class itself. + * + * @version $Id$ + */ +public class EditorTag extends TagSupport { + + private static final long serialVersionUID = -173091731589866140L; + + private String instanceName; + private String inputName; + private String width; + private String height; + private String toolbarSet; + private String value; + private String basePath; + + /** The underlying FCKeditor instance */ + private transient FCKeditor fckEditor; + + /** + * @see FCKeditor#setInstanceName(String) + */ + public void setInstanceName(String instanceName) { + this.instanceName = instanceName; + } + + /** + * @see FCKeditor#setInputName(String) + */ + public void setInputName(String inputName) { + this.inputName = inputName; + } + + /** + * @see FCKeditor#setWidth(String) + */ + public void setWidth(String width) { + this.width = width; + } + + /** + * @see FCKeditor#setHeight(String) + */ + public void setHeight(String height) { + this.height = height; + } + + /** + * @see FCKeditor#setToolbarSet(String) + */ + public void setToolbarSet(String toolbarSet) { + this.toolbarSet = toolbarSet; + } + + /** + * @see FCKeditor#setValue(String) + */ + public void setValue(String value) { + this.value = value; + } + + /** + * @see FCKeditor#setBasePath(String) + */ + public void setBasePath(String basePath) { + this.basePath = basePath; + } + + /** + * @see FCKeditor#setConfig(String, String) + */ + void setConfig(String name, String value) { + fckEditor.setConfig(name, value); + } + + @Override + public int doStartTag() throws JspException { + + try { + fckEditor = new FCKeditor((HttpServletRequest) pageContext + .getRequest(), instanceName, inputName); + + if (Utils.isNotEmpty(width)) + fckEditor.setWidth(width); + if (Utils.isNotEmpty(height)) + fckEditor.setHeight(height); + if (Utils.isNotEmpty(toolbarSet)) + fckEditor.setToolbarSet(toolbarSet); + if (Utils.isNotEmpty(value)) + fckEditor.setValue(value); + if (Utils.isNotEmpty(basePath)) + fckEditor.setBasePath(basePath); + + } catch (Exception e) { + throw new JspException(e); + } + + return EVAL_BODY_INCLUDE; + } + + @Override + public int doEndTag() throws JspException { + + JspWriter out = pageContext.getOut(); + + try { + out.println(fckEditor); + } catch (IOException e) { + throw new JspException( + "Tag response could not be written to the user!", e); + } + + return EVAL_PAGE; + } + +} \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/tags/package-info.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/tags/package-info.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/tags/package-info.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,28 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ + +/** + * JSP tags to create and configure the {@link net.fckeditor.FCKeditor FCKeditor} + * object. + * + * @version $Id$ + */ +package net.fckeditor.tags; \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/tool/Compatibility.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/tool/Compatibility.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/tool/Compatibility.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,113 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor.tool; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.servlet.http.HttpServletRequest; + +import net.fckeditor.FCKeditor; + +/** + * Checks browser compatibility with the {@link FCKeditor editor}. + * + * @version $Id$ + */ +public class Compatibility { + + /** + * Checks if a browser's user agent string is compatible with the FCKeditor. + * + * @param userAgentString + * the user agent string of a browser + * @return true if compatible, else false + */ + public static boolean check(final String userAgentString) { + if (Utils.isEmpty(userAgentString)) + return false; + + String userAgentStr = userAgentString.toLowerCase(); + + // IE 5.5+, check special keys like 'Opera' and 'mac', because there are + // some + // other browsers, containing 'MSIE' in there agent string! + if (userAgentStr.indexOf("opera") < 0 + && userAgentStr.indexOf("mac") < 0 + && getBrowserVersion(userAgentStr, ".*msie ([\\d]+.[\\d]+).*") >= 5.5f) + return true; + + // for all gecko based browsers + if (getBrowserVersion(userAgentStr, ".*rv:([\\d]+.[\\d]+).*") > 1.7f) + return true; + + // Opera 9.5+ + if (getBrowserVersion(userAgentStr, "opera/([\\d]+.[\\d]+).*") >= 9.5f + || getBrowserVersion(userAgentStr, ".*opera ([\\d]+.[\\d]+)") >= 9.5f) + return true; + + // Safari 3+ + if (getBrowserVersion(userAgentStr, ".*applewebkit/([\\d]+).*") >= 522f) + return true; + + return false; + } + + /** + * Returns true if a browser is compatible by its request + * user-agent header. + * + * @see #check(String) + * @param request + * current user request instance + * @return true if a browser is compatible, else + * false + */ + public static boolean isCompatibleBrowser(final HttpServletRequest request) { + return (request == null) ? false : check(request + .getHeader("user-agent")); + } + + /** + * Helper method to get the browser version from 'userAgent' with regex. The + * first matching group has to be the version number! + * + * @param userAgentString + * the user agent string of a browser + * @param regex + * the pattern to retrieve the browser version + * @return the browser version, or -1f if version can't be determined + */ + private static float getBrowserVersion(final String userAgentString, + final String regex) { + Pattern pattern = Pattern.compile(regex); + Matcher matcher = pattern.matcher(userAgentString); + if (matcher.matches()) { + try { + return Float.parseFloat(matcher.group(1)); + } catch (NumberFormatException e) { + return -1f; + } + } + return -1f; + } + +} \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/tool/Utils.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/tool/Utils.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/tool/Utils.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,139 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor.tool; + +import java.util.HashSet; +import java.util.Set; +import java.util.StringTokenizer; + +/** + * Static helper methods for strings. + * + * @version $Id$ + */ +public class Utils { + + /** The empty string {@code ""}. */ + public static final String EMPTY_STRING = ""; + + /** + * Constructs a set of lower-cased strings from a delimiter-separated + * string. + * + * @param stringList + * strings separated with a delimiter + * @param delimiter + * separating delimiter + * @return a lower-cased set, empty set if stringList is empty + * @throws IllegalArgumentException + * if delimiter is empty + */ + public static Set getSet(final String stringList, + final String delimiter) { + if (isEmpty(delimiter)) + throw new IllegalArgumentException( + "Argument 'delimiter' shouldn't be empty!"); + if (isEmpty(stringList)) + return new HashSet(); + + Set set = new HashSet(); + StringTokenizer st = new StringTokenizer(stringList, delimiter); + while (st.hasMoreTokens()) { + String tmp = st.nextToken(); + if (isNotEmpty(tmp)) // simple empty filter + set.add(tmp.toLowerCase()); + } + return set; + } + + /** + * Constructs a set of lower-cased strings from a | (pipe) + * delimited string. + * + * @see #getSet(String, String) + * @param stringList + * strings separated with a delimiter + * @return a lower-cased set, empty set if stringList is empty + * @throws IllegalArgumentException + * if delimiter is empty + */ + public static Set getSet(final String stringList) { + return getSet(stringList, "|"); + } + + /** + * Checks if a string is empty ("") or null. + * + * @param str + * string to check, may be null + * @return true if the string is null or empty, + * else false + */ + public static boolean isEmpty(final String str) { + return str == null || str.length() == 0; + } + + /** + * Checks if a string is not empty ("") and not null. + * + * @param str + * string to check, may be null + * @return true if the string is not empty and not + * null, else false + */ + public static boolean isNotEmpty(final String str) { + return !isEmpty(str); + } + + /** + * Checks if a string is whitespace, empty ("") or null. Whitespace is + * checked by {@link Character#isWhitespace(char)}. + * + * @param str + * string to check, may be null + * @return true if the string is null, empty or + * whitespace + */ + public static boolean isBlank(final String str) { + + if (isEmpty(str)) + return true; + + for (char c : str.toCharArray()) { + if (!Character.isWhitespace(c)) + return false; + } + + return true; + } + + /** + * Checks if a string is not empty (""), not null and not whitespace. + * + * @param str + * string to check, may be null + * @return true if the string is not null, not + * empty and not whitespace. + */ + public static boolean isNotBlank(final String str) { + return !isBlank(str); + } +} \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/tool/UtilsFile.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/tool/UtilsFile.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/tool/UtilsFile.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,177 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor.tool; + +import java.io.File; +import java.io.InputStream; +import java.util.regex.Pattern; + +import net.fckeditor.handlers.PropertiesLoader; + +import org.apache.commons.io.FilenameUtils; +import org.devlib.schmidt.imageinfo.ImageInfo; + +/** + * Static helper methods for files. + * + * @version $Id$ + */ +public class UtilsFile { + + protected static final Pattern ILLEGAL_CURRENT_FOLDER_PATTERN = Pattern + .compile("^[^/]|[^/]$|/\\.{1,2}|\\\\|\\||:|\\?|\\*|\"|<|>|\\p{Cntrl}"); + + /** + * Sanitizes a filename from certain chars.
+ * + * This method enforces the forceSingleExtension property and + * then replaces all occurrences of \, /, |, :, ?, *, ", <, >, + * control chars by _ (underscore). + * + * @param filename + * a potentially 'malicious' filename + * @return sanitized filename + */ + public static String sanitizeFileName(final String filename) { + + if (Utils.isEmpty(filename)) + return filename; + + String name = (PropertiesLoader.isForceSingleExtension()) ? UtilsFile + .forceSingleExtension(filename) : filename; + + // Remove \ / | : ? * " < > 'Control Chars' with _ + return name.replaceAll("\\\\|/|\\||:|\\?|\\*|\"|<|>|\\p{Cntrl}", "_"); + } + + /** + * Sanitizes a folder name from certain chars.
+ * + * This method replaces all occurrences of \, /, |, :, ?, *, ", <, + * >, control chars by _ (underscore). + * + * @param folderName + * a potentially 'malicious' folder name + * @return sanitized folder name + */ + public static String sanitizeFolderName(final String folderName) { + + if (Utils.isEmpty(folderName)) + return folderName; + + // Remove . \ / | : ? * " < > 'Control Chars' with _ + return folderName.replaceAll( + "\\.|\\\\|/|\\||:|\\?|\\*|\"|<|>|\\p{Cntrl}", "_"); + } + + /** + * Checks if the underlying input stream contains an image. + * + * @param in + * input stream of an image + * @return true if the underlying input stream contains an + * image, else false + */ + public static boolean isImage(final InputStream in) { + ImageInfo ii = new ImageInfo(); + ii.setInput(in); + return ii.check(); + } + + /** + * Checks whether a path complies with the FCKeditor File Browser rules. + * + * @param path + * a potentially 'malicious' path + * @return true if path complies with the rules, else + * false + */ + public static boolean isValidPath(final String path) { + if (Utils.isEmpty(path)) + return false; + + if (ILLEGAL_CURRENT_FOLDER_PATTERN.matcher(path).find()) + return false; + + return true; + } + + /** + * Replaces all dots in a filename with underscores except the last one. + * + * @param filename + * filename to sanitize + * @return string with a single dot only + */ + public static String forceSingleExtension(final String filename) { + return filename.replaceAll("\\.(?![^.]+$)", "_"); + } + + /** + * Checks if a filename contains more than one dot. + * + * @param filename + * filename to check + * @return true if filename contains severals dots, else + * false + */ + public static boolean isSingleExtension(final String filename) { + return filename.matches("[^\\.]+\\.[^\\.]+"); + } + + /** + * Checks a directory for existence and creates it if non-existent. + * + * @param dir + * directory to check/create + */ + public static void checkDirAndCreate(File dir) { + if (!dir.exists()) + dir.mkdirs(); + } + + /** + * Iterates over a base name and returns the first non-existent file.
+ * This method extracts a file's base name, iterates over it until the first + * non-existent appearance with basename(n).ext. Where n is a + * positive integer starting from one. + * + * @param file + * base file + * @return first non-existent file + */ + public static File getUniqueFile(final File file) { + if (!file.exists()) + return file; + + File tmpFile = new File(file.getAbsolutePath()); + File parentDir = tmpFile.getParentFile(); + int count = 1; + String extension = FilenameUtils.getExtension(tmpFile.getName()); + String baseName = FilenameUtils.getBaseName(tmpFile.getName()); + do { + tmpFile = new File(parentDir, baseName + "(" + count++ + ")." + + extension); + } while (tmpFile.exists()); + return tmpFile; + } +} \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/tool/UtilsResponse.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/tool/UtilsResponse.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/tool/UtilsResponse.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,71 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor.tool; + +import net.fckeditor.handlers.ResourceType; + +/** + * Static helper methods for the servlet response. + * + * @version $Id$ + */ +public class UtilsResponse { + + /** + * Assembles a URL with omitted filename. + * + * @see #fileUrl(String, ResourceType, String, String) + */ + public static String getUrl(String userFilesPath, ResourceType type, + String currentFolder) { + return fileUrl(userFilesPath, type, currentFolder, null); + } + + /** + * + * Assembles a file URL for the File Browser. Simply appends parameters to a + * string buffer with reasonable parameter checking. + * + * @param userFilesPath + * the current userfiles path (may be null) + * @param type + * the current resource type + * @param currentFolder + * the selected current folder + * @param filename + * the current chosen file (may be null) + * @return assembled url for the File Browser + */ + public static String fileUrl(String userFilesPath, ResourceType type, + String currentFolder, String filename) { + + StringBuffer sb = new StringBuffer(); + if (Utils.isNotEmpty(userFilesPath)) + sb.append(userFilesPath); + sb.append(type.getPath()); + sb.append(currentFolder); + if (Utils.isNotEmpty(filename)) + sb.append(filename); + + return sb.toString(); + } + +} Index: 3rdParty_sources/ckeditor/net/fckeditor/tool/XHtmlTagTool.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/tool/XHtmlTagTool.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/tool/XHtmlTagTool.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,144 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ +package net.fckeditor.tool; + +import java.util.HashMap; +import java.util.Map; + +/** + * Java representation of an XHTML tag. + *

+ * Usage: + *

+ * XHtmlTagTool tag = XHtmlTagTool("a", "link");
+ * tag.addAttribute("href", "http://google.com");
+ * tag.toString();: <a href="http://google.com">link</a>
+ * 
+ *

+ * Note: + *
    + *
  • Attributes are not ordered.
  • + *
  • If you want to avoid self-closing tags without supplying a value, set + * {@link #SPACE} as the tag's value.
  • + *
+ * + * @version $Id$ + */ +public class XHtmlTagTool { + + /** Name of the tag. */ + private String name; + + /** Container for the attributes. */ + private Map attributes = new HashMap(); + + /** Value of the tag. */ + private String value; + + /** Indicator to uses non self-closing tag. */ + public static final String SPACE = " "; + + /** + * Class constructor with tag name. + * + * @param name + * the tag name of the new XHtmlTagTool + * @throws IllegalArgumentException + * if name is empty + */ + public XHtmlTagTool(final String name) { + if (Utils.isEmpty(name)) + throw new IllegalArgumentException( + "Parameter 'name' shouldn't be empty!"); + this.name = name; + } + + /** + * Class constructor with name and value. + * + * @param name + * the tag name of the new XHtmlTagTool + * @param value + * the tag value of the new XHtmlTagTool which is the tag body + * @throws IllegalArgumentException + * if name is empty + */ + public XHtmlTagTool(final String name, final String value) { + this(name); + this.value = value; + } + + /** + * Sets the tag value. + * + * @param value + * the tag value which is the tag body + */ + public void setValue(final String value) { + this.value = value; + } + + /** + * Adds an attribute to this tag. + * + * @param name + * attribute name + * @param value + * attribute value + * @throws IllegalArgumentException + * if name is empty + */ + public void addAttribute(final String name, final String value) { + if (Utils.isEmpty(name)) + throw new IllegalArgumentException("Name is null or empty"); + attributes.put(name, value); + } + + /** + * Creates the HTML representation of this tag. It follows the XHTML + * standard. + * + * @return HTML representation of this tag + */ + @Override + public String toString() { + StringBuffer tag = new StringBuffer(); + + // open tag + tag.append("<").append(name); + + // add attributes + for (String key : attributes.keySet()) { + String val = attributes.get(key); + tag.append(' ').append(key).append('=').append('\"').append(val) + .append('\"'); + } + + // close the tag + if (Utils.isNotEmpty(value)) { + tag.append(">").append(value).append("'); + } else + tag.append(" />"); + + return tag.toString(); + } + +} \ No newline at end of file Index: 3rdParty_sources/ckeditor/net/fckeditor/tool/package-info.java =================================================================== diff -u --- 3rdParty_sources/ckeditor/net/fckeditor/tool/package-info.java (revision 0) +++ 3rdParty_sources/ckeditor/net/fckeditor/tool/package-info.java (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -0,0 +1,27 @@ +/* + * FCKeditor - The text editor for Internet - http://www.fckeditor.net + * Copyright (C) 2004-2010 Frederico Caldeira Knabben + * + * == BEGIN LICENSE == + * + * Licensed under the terms of any of the following licenses at your + * choice: + * + * - GNU General Public License Version 2 or later (the "GPL") + * http://www.gnu.org/licenses/gpl.html + * + * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") + * http://www.gnu.org/licenses/lgpl.html + * + * - Mozilla Public License Version 1.1 or later (the "MPL") + * http://www.mozilla.org/MPL/MPL-1.1.html + * + * == END LICENSE == + */ + +/** + * Various tool classes. + * + * @version $Id$ + */ +package net.fckeditor.tool; \ No newline at end of file Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/a11yhelp/lang/en.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/a11yhelp/lang/he.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/a11yhelp/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/about/dialogs/about.js'. Fisheye: No comparison available. Pass `N' to diff? Index: 3rdParty_sources/ckeditor/plugins/about/dialogs/logo_ckeditor.png =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/about/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/adobeair/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/ajax/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/autogrow/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/basicstyles/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/bbcode/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/bidi/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/blockquote/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/button/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/clipboard/dialogs/paste.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/clipboard/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/colorbutton/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/colordialog/dialogs/colordialog.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/colordialog/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/contextmenu/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/devtools/lang/en.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/devtools/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/dialog/dialogDefinition.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/dialog/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/dialogadvtab/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/dialogui/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/div/dialogs/div.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/div/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/docprops/dialogs/docprops.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/docprops/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/domiterator/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/editingblock/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/elementspath/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/enterkey/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/entities/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/fakeobjects/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/filebrowser/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/find/dialogs/find.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/find/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/flash/dialogs/flash.js'. Fisheye: No comparison available. Pass `N' to diff? Index: 3rdParty_sources/ckeditor/plugins/flash/images/placeholder.png =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/flash/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/floatpanel/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/font/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/format/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/forms/dialogs/button.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/forms/dialogs/checkbox.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/forms/dialogs/form.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/forms/dialogs/hiddenfield.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/forms/dialogs/radio.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/forms/dialogs/select.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/forms/dialogs/textarea.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/forms/dialogs/textfield.js'. Fisheye: No comparison available. Pass `N' to diff? Index: 3rdParty_sources/ckeditor/plugins/forms/images/hiddenfield.gif =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/forms/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/horizontalrule/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/htmldataprocessor/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/htmlwriter/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/iframe/dialogs/iframe.js'. Fisheye: No comparison available. Pass `N' to diff? Index: 3rdParty_sources/ckeditor/plugins/iframe/images/placeholder.png =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/iframe/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/iframedialog/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/image/dialogs/image.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/image/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/indent/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/justify/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/keystrokes/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/link/dialogs/anchor.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/link/dialogs/link.js'. Fisheye: No comparison available. Pass `N' to diff? Index: 3rdParty_sources/ckeditor/plugins/link/images/anchor.gif =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/link/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/list/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/listblock/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/liststyle/dialogs/liststyle.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/liststyle/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/maximize/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/menu/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/menubutton/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/newpage/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Index: 3rdParty_sources/ckeditor/plugins/pagebreak/images/pagebreak.gif =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/pagebreak/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/panel/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/panelbutton/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/pastefromword/filter/default.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/pastefromword/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/pastetext/dialogs/pastetext.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/pastetext/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/placeholder/dialogs/placeholder.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/placeholder/lang/en.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/placeholder/lang/he.js'. Fisheye: No comparison available. Pass `N' to diff? Index: 3rdParty_sources/ckeditor/plugins/placeholder/placeholder.gif =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/placeholder/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/popup/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/preview/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/print/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/removeformat/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/resize/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/richcombo/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/save/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/scayt/dialogs/options.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/scayt/dialogs/toolbar.css'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/scayt/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/selection/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Index: 3rdParty_sources/ckeditor/plugins/showblocks/images/block_address.png =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/plugins/showblocks/images/block_blockquote.png =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/plugins/showblocks/images/block_div.png =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/plugins/showblocks/images/block_h1.png =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/plugins/showblocks/images/block_h2.png =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/plugins/showblocks/images/block_h3.png =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/plugins/showblocks/images/block_h4.png =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/plugins/showblocks/images/block_h5.png =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/plugins/showblocks/images/block_h6.png =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/plugins/showblocks/images/block_p.png =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/plugins/showblocks/images/block_pre.png =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/showblocks/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/showborders/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/smiley/dialogs/smiley.js'. Fisheye: No comparison available. Pass `N' to diff? Index: 3rdParty_sources/ckeditor/plugins/smiley/images/angel_smile.gif =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/plugins/smiley/images/angry_smile.gif =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/plugins/smiley/images/broken_heart.gif =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/plugins/smiley/images/confused_smile.gif =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/plugins/smiley/images/cry_smile.gif =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/plugins/smiley/images/devil_smile.gif =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/plugins/smiley/images/embaressed_smile.gif =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/plugins/smiley/images/envelope.gif =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/plugins/smiley/images/heart.gif =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/plugins/smiley/images/kiss.gif =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/plugins/smiley/images/lightbulb.gif =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/plugins/smiley/images/omg_smile.gif =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/plugins/smiley/images/regular_smile.gif =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/plugins/smiley/images/sad_smile.gif =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/plugins/smiley/images/shades_smile.gif =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/plugins/smiley/images/teeth_smile.gif =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/plugins/smiley/images/thumbs_down.gif =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/plugins/smiley/images/thumbs_up.gif =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/plugins/smiley/images/tounge_smile.gif =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/plugins/smiley/images/wink_smile.gif =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/smiley/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/sourcearea/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/specialchar/dialogs/specialchar.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/specialchar/lang/en.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/specialchar/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/styles/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/styles/styles/default.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/stylescombo/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/stylesheetparser/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/tab/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/table/dialogs/table.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/table/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/tableresize/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/tabletools/dialogs/tableCell.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/tabletools/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/templates/dialogs/templates.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/templates/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/templates/templates/default.js'. Fisheye: No comparison available. Pass `N' to diff? Index: 3rdParty_sources/ckeditor/plugins/templates/templates/images/template1.gif =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/plugins/templates/templates/images/template2.gif =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/plugins/templates/templates/images/template3.gif =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/toolbar/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/uicolor/dialogs/uicolor.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/uicolor/lang/en.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/uicolor/lang/he.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/uicolor/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Index: 3rdParty_sources/ckeditor/plugins/uicolor/uicolor.gif =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/plugins/uicolor/yui/assets/hue_bg.png =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/plugins/uicolor/yui/assets/hue_thumb.png =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/plugins/uicolor/yui/assets/picker_mask.png =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/plugins/uicolor/yui/assets/picker_thumb.png =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/uicolor/yui/assets/yui.css'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/uicolor/yui/yui.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/undo/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/wsc/dialogs/ciframe.html'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/wsc/dialogs/tmpFrameset.html'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/wsc/dialogs/wsc.css'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/wsc/dialogs/wsc.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/wsc/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/wysiwygarea/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/plugins/xml/plugin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/skins/kama/dialog.css'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/skins/kama/editor.css'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/skins/kama/elementspath.css'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/skins/kama/icons.css'. Fisheye: No comparison available. Pass `N' to diff? Index: 3rdParty_sources/ckeditor/skins/kama/icons.png =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/skins/kama/icons_rtl.png =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/skins/kama/images/dialog_sides.gif =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/skins/kama/images/dialog_sides.png =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/skins/kama/images/dialog_sides_rtl.png =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/skins/kama/images/mini.gif =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/skins/kama/images/noimage.png =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/skins/kama/images/sprites.png =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/skins/kama/images/sprites_ie6.png =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/skins/kama/images/toolbar_start.gif =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/skins/kama/mainui.css'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/skins/kama/menu.css'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/skins/kama/panel.css'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/skins/kama/presets.css'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/skins/kama/reset.css'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/skins/kama/richcombo.css'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/skins/kama/skin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/skins/kama/templates.css'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/skins/kama/toolbar.css'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/skins/office2003/dialog.css'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/skins/office2003/editor.css'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/skins/office2003/elementspath.css'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/skins/office2003/icons.css'. Fisheye: No comparison available. Pass `N' to diff? Index: 3rdParty_sources/ckeditor/skins/office2003/icons.png =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/skins/office2003/icons_rtl.png =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/skins/office2003/images/dialog_sides.gif =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/skins/office2003/images/dialog_sides.png =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/skins/office2003/images/dialog_sides_rtl.png =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/skins/office2003/images/mini.gif =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/skins/office2003/images/noimage.png =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/skins/office2003/images/sprites.png =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/skins/office2003/images/sprites_ie6.png =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/skins/office2003/mainui.css'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/skins/office2003/menu.css'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/skins/office2003/panel.css'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/skins/office2003/presets.css'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/skins/office2003/reset.css'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/skins/office2003/richcombo.css'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/skins/office2003/skin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/skins/office2003/templates.css'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/skins/office2003/toolbar.css'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/skins/v2/dialog.css'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/skins/v2/editor.css'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/skins/v2/elementspath.css'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/skins/v2/icons.css'. Fisheye: No comparison available. Pass `N' to diff? Index: 3rdParty_sources/ckeditor/skins/v2/icons.png =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/skins/v2/icons_rtl.png =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/skins/v2/images/dialog_sides.gif =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/skins/v2/images/dialog_sides.png =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/skins/v2/images/dialog_sides_rtl.png =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/skins/v2/images/mini.gif =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/skins/v2/images/noimage.png =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/skins/v2/images/sprites.png =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/skins/v2/images/sprites_ie6.png =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Index: 3rdParty_sources/ckeditor/skins/v2/images/toolbar_start.gif =================================================================== diff -u -re02ca4f2e9a802f43deb72a9dfefe2c92f4b6181 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 Binary files differ Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/skins/v2/mainui.css'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/skins/v2/menu.css'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/skins/v2/panel.css'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/skins/v2/presets.css'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/skins/v2/reset.css'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/skins/v2/richcombo.css'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/skins/v2/skin.js'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/skins/v2/templates.css'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/skins/v2/toolbar.css'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag f08f6c4324d6ce0ca8dc43b875a498d89dd91116 refers to a dead (removed) revision in file `3rdParty_sources/ckeditor/themes/default/theme.js'. Fisheye: No comparison available. Pass `N' to diff? Index: 3rdParty_sources/versions.txt =================================================================== diff -u -r1844238a2f60615475db8855871a1488d04e629b -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 --- 3rdParty_sources/versions.txt (.../versions.txt) (revision 1844238a2f60615475db8855871a1488d04e629b) +++ 3rdParty_sources/versions.txt (.../versions.txt) (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -9,7 +9,7 @@ batik 1.7.0 -CKEditor 3.6.2 +CKEditor Java 2.6 Commons HttpClient 3.0 Index: lams_build/3rdParty.userlibraries =================================================================== diff -u -r1844238a2f60615475db8855871a1488d04e629b -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 --- lams_build/3rdParty.userlibraries (.../3rdParty.userlibraries) (revision 1844238a2f60615475db8855871a1488d04e629b) +++ lams_build/3rdParty.userlibraries (.../3rdParty.userlibraries) (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -20,7 +20,7 @@ - + Index: lams_build/lib/autopatch/autopatch.module.xml =================================================================== diff -u -ra97551456cf5afd4f3ca943f18423aa89bc67fb2 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 --- lams_build/lib/autopatch/autopatch.module.xml (.../autopatch.module.xml) (revision a97551456cf5afd4f3ca943f18423aa89bc67fb2) +++ lams_build/lib/autopatch/autopatch.module.xml (.../autopatch.module.xml) (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -28,7 +28,14 @@ + + + + + + + - + \ No newline at end of file Index: lams_build/lib/fckeditor/fckeditor.module.xml =================================================================== diff -u -ra97551456cf5afd4f3ca943f18423aa89bc67fb2 -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 --- lams_build/lib/fckeditor/fckeditor.module.xml (.../fckeditor.module.xml) (revision a97551456cf5afd4f3ca943f18423aa89bc67fb2) +++ lams_build/lib/fckeditor/fckeditor.module.xml (.../fckeditor.module.xml) (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -29,5 +29,6 @@ + - + \ No newline at end of file Index: lams_build/lib/jakarta-commons/digester.module.xml =================================================================== diff -u -rd69a7666890425c7f44e12277b495eac4b466aef -rf08f6c4324d6ce0ca8dc43b875a498d89dd91116 --- lams_build/lib/jakarta-commons/digester.module.xml (.../digester.module.xml) (revision d69a7666890425c7f44e12277b495eac4b466aef) +++ lams_build/lib/jakarta-commons/digester.module.xml (.../digester.module.xml) (revision f08f6c4324d6ce0ca8dc43b875a498d89dd91116) @@ -29,5 +29,7 @@ + + \ No newline at end of file