From 6a44d45d5e60b6187ddca5fa280f468d5763c2ad Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Sat, 28 Nov 2020 12:52:31 +0100 Subject: [PATCH] Improve CMS session. --- .../argeo/cms/web/AbstractCmsEntryPoint.java | 1 + .../argeo/cms/web/BundleResourceLoader.java | 4 +- .../src/org/argeo/cms/web/CmsWebApp.java | 32 +----- .../org/argeo/cms/web/CmsWebEntryPoint.java | 9 +- .../src/org/argeo/cms/web/SimpleApp.java | 1 + .../org/argeo/cms/web/SimpleErgonomics.java | 1 + .../src/org/argeo/cms/ui/CmsView.java | 5 + .../src/org/argeo/cms/auth/CmsSession.java | 2 + .../cms/internal/auth/CmsSessionImpl.java | 9 ++ .../cms/internal/kernel/EgoRepository.java | 7 +- org.argeo.jcr/src/org/argeo/jcr/Jcr.java | 105 ++++++++++-------- 11 files changed, 95 insertions(+), 81 deletions(-) diff --git a/org.argeo.cms.ui.rap/src/org/argeo/cms/web/AbstractCmsEntryPoint.java b/org.argeo.cms.ui.rap/src/org/argeo/cms/web/AbstractCmsEntryPoint.java index bdc4f24bb..887490c41 100644 --- a/org.argeo.cms.ui.rap/src/org/argeo/cms/web/AbstractCmsEntryPoint.java +++ b/org.argeo.cms.ui.rap/src/org/argeo/cms/web/AbstractCmsEntryPoint.java @@ -46,6 +46,7 @@ import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; /** Manages history and navigation */ +@Deprecated public abstract class AbstractCmsEntryPoint extends AbstractEntryPoint implements CmsView { private static final long serialVersionUID = 906558779562569784L; diff --git a/org.argeo.cms.ui.rap/src/org/argeo/cms/web/BundleResourceLoader.java b/org.argeo.cms.ui.rap/src/org/argeo/cms/web/BundleResourceLoader.java index e6ad61db6..ca93e625e 100644 --- a/org.argeo.cms.ui.rap/src/org/argeo/cms/web/BundleResourceLoader.java +++ b/org.argeo.cms.ui.rap/src/org/argeo/cms/web/BundleResourceLoader.java @@ -4,7 +4,6 @@ import java.io.IOException; import java.io.InputStream; import java.net.URL; -import org.argeo.cms.CmsException; import org.eclipse.rap.rwt.service.ResourceLoader; import org.osgi.framework.Bundle; @@ -22,7 +21,8 @@ public class BundleResourceLoader implements ResourceLoader { if (res == null) { res = bundle.getResource(resourceName); if (res == null) - throw new CmsException("Resource " + resourceName + " not found in bundle " + bundle.getSymbolicName()); + throw new IllegalArgumentException( + "Resource " + resourceName + " not found in bundle " + bundle.getSymbolicName()); } return res.openStream(); } diff --git a/org.argeo.cms.ui.rap/src/org/argeo/cms/web/CmsWebApp.java b/org.argeo.cms.ui.rap/src/org/argeo/cms/web/CmsWebApp.java index ca26c5830..25b30c9b3 100644 --- a/org.argeo.cms.ui.rap/src/org/argeo/cms/web/CmsWebApp.java +++ b/org.argeo.cms.ui.rap/src/org/argeo/cms/web/CmsWebApp.java @@ -39,7 +39,6 @@ public class CmsWebApp implements ApplicationConfiguration, ExceptionHandler, Cm contextName = properties.get(CONTEXT_NAME); if (cmsApp != null) themingUpdated(); -// registerIfAllThemesAvailable(); } public void destroy(BundleContext bundleContext, Map properties) { @@ -54,12 +53,10 @@ public class CmsWebApp implements ApplicationConfiguration, ExceptionHandler, Cm if (theme != null) WebThemeUtils.apply(application, theme); } -// for (CmsTheme theme : themes.values()) -// WebThemeUtils.apply(application, theme); Map properties = new HashMap<>(); addEntryPoints(application, properties); - + application.setExceptionHandler(this); } @Override @@ -83,8 +80,6 @@ public class CmsWebApp implements ApplicationConfiguration, ExceptionHandler, Cm properties.put(WebClient.HEAD_HTML, theme.getHtmlHeaders()); } else { properties.put(WebClient.THEME_ID, RWT.DEFAULT_THEME_ID); -// if (themeId != null) -// log.warn("Theme id " + themeId + " was specified but it was not found, using default RWT theme."); } String entryPointName = !uiName.equals("") ? "/" + uiName : "/"; application.addEntryPoint(entryPointName, () -> { @@ -99,34 +94,17 @@ public class CmsWebApp implements ApplicationConfiguration, ExceptionHandler, Cm log.debug("Published CMS web app /" + (contextName != null ? contextName : "")); } -// private void registerIfAllThemesAvailable() { -// boolean themeMissing = false; -// uiNames: for (String uiName : cmsApp.getUiNames()) { -// String themeId = cmsApp.getThemeId(uiName); -// if (RWT.DEFAULT_THEME_ID.equals(themeId)) -// continue uiNames; -// if (!themes.containsKey(themeId)) { -// themeMissing = true; -// break uiNames; -// } -// } -// if (!themeMissing) { -// Dictionary regProps = LangUtils.dict(CONTEXT_NAME, contextName); -// if (bundleContext != null) { -// rwtAppReg = bundleContext.registerService(ApplicationConfiguration.class, this, regProps); -// log.info("Published CMS web app /" + (contextName != null ? contextName : "")); -// } -// } -// } - CmsApp getCmsApp() { return cmsApp; } + BundleContext getBundleContext() { + return bundleContext; + } + public void setCmsApp(CmsApp cmsApp, Map properties) { this.cmsApp = cmsApp; this.cmsApp.addCmsAppListener(this); -// registerIfAllThemesAvailable(); } public void unsetCmsApp(CmsApp cmsApp, Map properties) { diff --git a/org.argeo.cms.ui.rap/src/org/argeo/cms/web/CmsWebEntryPoint.java b/org.argeo.cms.ui.rap/src/org/argeo/cms/web/CmsWebEntryPoint.java index 9dae30cb2..470aa5edc 100644 --- a/org.argeo.cms.ui.rap/src/org/argeo/cms/web/CmsWebEntryPoint.java +++ b/org.argeo.cms.ui.rap/src/org/argeo/cms/web/CmsWebEntryPoint.java @@ -14,6 +14,7 @@ import javax.security.auth.login.LoginException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.argeo.api.NodeConstants; +import org.argeo.cms.auth.CmsSession; import org.argeo.cms.auth.CurrentUser; import org.argeo.cms.auth.HttpRequestCallbackHandler; import org.argeo.cms.ui.CmsApp; @@ -217,7 +218,7 @@ public class CmsWebEntryPoint implements EntryPoint, CmsView, BrowserNavigationL @Override public void navigated(BrowserNavigationEvent event) { setState(event.getState()); - //doRefresh(); + // doRefresh(); } @Override @@ -236,6 +237,12 @@ public class CmsWebEntryPoint implements EntryPoint, CmsView, BrowserNavigationL browserNavigation.pushState(state, title); } + @Override + public CmsSession getCmsSession() { + CmsSession cmsSession = CmsSession.getCmsSession(cmsWebApp.getBundleContext(), getSubject()); + return cmsSession; + } + /* * EntryPoint IMPLEMENTATION */ diff --git a/org.argeo.cms.ui.rap/src/org/argeo/cms/web/SimpleApp.java b/org.argeo.cms.ui.rap/src/org/argeo/cms/web/SimpleApp.java index 2a651bd30..fd893106a 100644 --- a/org.argeo.cms.ui.rap/src/org/argeo/cms/web/SimpleApp.java +++ b/org.argeo.cms.ui.rap/src/org/argeo/cms/web/SimpleApp.java @@ -52,6 +52,7 @@ import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceRegistration; /** A basic generic app based on {@link SimpleErgonomics}. */ +@Deprecated public class SimpleApp implements CmsConstants, ApplicationConfiguration { private final static Log log = LogFactory.getLog(SimpleApp.class); diff --git a/org.argeo.cms.ui.rap/src/org/argeo/cms/web/SimpleErgonomics.java b/org.argeo.cms.ui.rap/src/org/argeo/cms/web/SimpleErgonomics.java index 7e17770e6..9760f9dad 100644 --- a/org.argeo.cms.ui.rap/src/org/argeo/cms/web/SimpleErgonomics.java +++ b/org.argeo.cms.ui.rap/src/org/argeo/cms/web/SimpleErgonomics.java @@ -27,6 +27,7 @@ import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; /** Simple header/body ergonomics. */ +@Deprecated public class SimpleErgonomics extends AbstractCmsEntryPoint { private static final long serialVersionUID = 8743413921359548523L; diff --git a/org.argeo.cms.ui/src/org/argeo/cms/ui/CmsView.java b/org.argeo.cms.ui/src/org/argeo/cms/ui/CmsView.java index d57f20bed..dcc1f1fd1 100644 --- a/org.argeo.cms.ui/src/org/argeo/cms/ui/CmsView.java +++ b/org.argeo.cms.ui/src/org/argeo/cms/ui/CmsView.java @@ -6,6 +6,7 @@ import java.util.Map; import javax.security.auth.login.LoginContext; +import org.argeo.cms.auth.CmsSession; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Shell; @@ -63,6 +64,10 @@ public interface CmsView { default void stateChanged(String state, String title) { } + + default CmsSession getCmsSession() { + throw new UnsupportedOperationException(); + } static CmsView getCmsView(Control parent) { // find parent shell diff --git a/org.argeo.cms/src/org/argeo/cms/auth/CmsSession.java b/org.argeo.cms/src/org/argeo/cms/auth/CmsSession.java index b9798006b..8b3890878 100644 --- a/org.argeo.cms/src/org/argeo/cms/auth/CmsSession.java +++ b/org.argeo.cms/src/org/argeo/cms/auth/CmsSession.java @@ -38,6 +38,8 @@ public interface CmsSession { boolean isValid(); + void registerView(String uid, Object view); + /** @return The {@link CmsSession} for this {@link Subject} or null. */ static CmsSession getCmsSession(BundleContext bc, Subject subject) { if (subject.getPrivateCredentials(CmsSessionId.class).isEmpty()) diff --git a/org.argeo.cms/src/org/argeo/cms/internal/auth/CmsSessionImpl.java b/org.argeo.cms/src/org/argeo/cms/internal/auth/CmsSessionImpl.java index 8761480fe..211f21c94 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/auth/CmsSessionImpl.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/auth/CmsSessionImpl.java @@ -60,6 +60,8 @@ public class CmsSessionImpl implements CmsSession { private Set dataSessionsInUse = new HashSet<>(); private LinkedHashSet additionalDataSessions = new LinkedHashSet<>(); + private Map views = new HashMap<>(); + public CmsSessionImpl(Subject initialSubject, Authorization authorization, Locale locale, String localSessionId) { this.creationTime = ZonedDateTime.now(); this.locale = locale; @@ -247,6 +249,13 @@ public class CmsSessionImpl implements CmsSession { return end; } + @Override + public void registerView(String uid, Object view) { + if (views.containsKey(uid)) + throw new IllegalArgumentException("View " + uid + " is already registered."); + views.put(uid, view); + } + public String toString() { return "CMS Session " + userDn + " local=" + localSessionId + ", uuid=" + uuid; } diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/EgoRepository.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/EgoRepository.java index e23f8d1ac..c866eaaa2 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/EgoRepository.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/EgoRepository.java @@ -20,6 +20,7 @@ import javax.security.auth.login.LoginContext; import org.argeo.api.NodeConstants; import org.argeo.api.NodeUtils; import org.argeo.cms.CmsException; +import org.argeo.jcr.JcrException; import org.argeo.jcr.JcrRepositoryWrapper; import org.argeo.jcr.JcrUtils; @@ -52,7 +53,7 @@ class EgoRepository extends JcrRepositoryWrapper implements KernelConstants { lc = new LoginContext(NodeConstants.LOGIN_CONTEXT_DATA_ADMIN); lc.login(); } catch (javax.security.auth.login.LoginException e1) { - throw new CmsException("Cannot login as systrem", e1); + throw new IllegalStateException("Cannot login as system", e1); } Subject.doAs(lc.getSubject(), new PrivilegedAction() { @@ -75,7 +76,7 @@ class EgoRepository extends JcrRepositoryWrapper implements KernelConstants { // initJcr(adminSession); } catch (RepositoryException e) { - throw new CmsException("Cannot init JCR home", e); + throw new JcrException("Cannot init JCR home", e); } finally { JcrUtils.logoutQuietly(adminSession); } @@ -185,7 +186,7 @@ class EgoRepository extends JcrRepositoryWrapper implements KernelConstants { adminSession.save(); } catch (RepositoryException e) { JcrUtils.discardQuietly(adminSession); - throw new CmsException("Cannot sync node security model for " + username, e); + throw new JcrException("Cannot sync node security model for " + username, e); } } diff --git a/org.argeo.jcr/src/org/argeo/jcr/Jcr.java b/org.argeo.jcr/src/org/argeo/jcr/Jcr.java index 263128448..493e4afe2 100644 --- a/org.argeo.jcr/src/org/argeo/jcr/Jcr.java +++ b/org.argeo.jcr/src/org/argeo/jcr/Jcr.java @@ -94,62 +94,62 @@ public class Jcr { /** * @see Node#isNodeType(String) - * @throws IllegalStateException caused by {@link RepositoryException} + * @throws JcrException caused by {@link RepositoryException} */ public static boolean isNodeType(Node node, String nodeTypeName) { try { return node.isNodeType(nodeTypeName); } catch (RepositoryException e) { - throw new IllegalStateException("Cannot get whether " + node + " is of type " + nodeTypeName, e); + throw new JcrException("Cannot get whether " + node + " is of type " + nodeTypeName, e); } } /** * @see Node#hasNodes() - * @throws IllegalStateException caused by {@link RepositoryException} + * @throws JcrException caused by {@link RepositoryException} */ public static boolean hasNodes(Node node) { try { return node.hasNodes(); } catch (RepositoryException e) { - throw new IllegalStateException("Cannot get whether " + node + " has children.", e); + throw new JcrException("Cannot get whether " + node + " has children.", e); } } /** * @see Node#getParent() - * @throws IllegalStateException caused by {@link RepositoryException} + * @throws JcrException caused by {@link RepositoryException} */ public static Node getParent(Node node) { try { return isRoot(node) ? null : node.getParent(); } catch (RepositoryException e) { - throw new IllegalStateException("Cannot get parent of " + node, e); + throw new JcrException("Cannot get parent of " + node, e); } } /** * Whether this node is the root node. * - * @throws IllegalStateException caused by {@link RepositoryException} + * @throws JcrException caused by {@link RepositoryException} */ public static boolean isRoot(Node node) { try { return node.getDepth() == 0; } catch (RepositoryException e) { - throw new IllegalStateException("Cannot get depth of " + node, e); + throw new JcrException("Cannot get depth of " + node, e); } } /** * @see Node#getPath() - * @throws IllegalStateException caused by {@link RepositoryException} + * @throws JcrException caused by {@link RepositoryException} */ public static String getPath(Node node) { try { return node.getPath(); } catch (RepositoryException e) { - throw new IllegalStateException("Cannot get path of " + node, e); + throw new JcrException("Cannot get path of " + node, e); } } @@ -164,25 +164,25 @@ public class Jcr { /** * @see Node#getIdentifier() - * @throws IllegalStateException caused by {@link RepositoryException} + * @throws JcrException caused by {@link RepositoryException} */ public static String getIdentifier(Node node) { try { return node.getIdentifier(); } catch (RepositoryException e) { - throw new IllegalStateException("Cannot get identifier of " + node, e); + throw new JcrException("Cannot get identifier of " + node, e); } } /** * @see Node#getName() - * @throws IllegalStateException caused by {@link RepositoryException} + * @throws JcrException caused by {@link RepositoryException} */ public static String getName(Node node) { try { return node.getName(); } catch (RepositoryException e) { - throw new IllegalStateException("Cannot get name of " + node, e); + throw new JcrException("Cannot get name of " + node, e); } } @@ -212,20 +212,20 @@ public class Jcr { /** * @return the children as an {@link Iterable} for use in for-each llops. * @see Node#getNodes() - * @throws IllegalStateException caused by {@link RepositoryException} + * @throws JcrException caused by {@link RepositoryException} */ public static Iterable nodes(Node node) { try { return iterate(node.getNodes()); } catch (RepositoryException e) { - throw new IllegalStateException("Cannot get children of " + node, e); + throw new JcrException("Cannot get children of " + node, e); } } /** * @return the children as a (possibly empty) {@link List}. * @see Node#getNodes() - * @throws IllegalStateException caused by {@link RepositoryException} + * @throws JcrException caused by {@link RepositoryException} */ public static List getNodes(Node node) { List nodes = new ArrayList<>(); @@ -238,14 +238,14 @@ public class Jcr { } else return nodes; } catch (RepositoryException e) { - throw new IllegalStateException("Cannot get children of " + node, e); + throw new JcrException("Cannot get children of " + node, e); } } /** * @return the child or null if not found * @see Node#getNode(String) - * @throws IllegalStateException caused by {@link RepositoryException} + * @throws JcrException caused by {@link RepositoryException} */ public static Node getNode(Node node, String child) { try { @@ -254,14 +254,14 @@ public class Jcr { else return null; } catch (RepositoryException e) { - throw new IllegalStateException("Cannot get child of " + node, e); + throw new JcrException("Cannot get child of " + node, e); } } /** * @return the node at this path or null if not found * @see Session#getNode(String) - * @throws IllegalStateException caused by {@link RepositoryException} + * @throws JcrException caused by {@link RepositoryException} */ public static Node getNode(Session session, String path) { try { @@ -270,14 +270,14 @@ public class Jcr { else return null; } catch (RepositoryException e) { - throw new IllegalStateException("Cannot get node " + path, e); + throw new JcrException("Cannot get node " + path, e); } } /** * @return the node with htis id or null if not found * @see Session#getNodeByIdentifier(String) - * @throws IllegalStateException caused by {@link RepositoryException} + * @throws JcrException caused by {@link RepositoryException} */ public static Node getNodeById(Session session, String id) { try { @@ -285,7 +285,7 @@ public class Jcr { } catch (ItemNotFoundException e) { return null; } catch (RepositoryException e) { - throw new IllegalStateException("Cannot get node with id " + id, e); + throw new JcrException("Cannot get node with id " + id, e); } } @@ -293,7 +293,7 @@ public class Jcr { * Set a property to the given value, or remove it if the value is * null. * - * @throws IllegalStateException caused by {@link RepositoryException} + * @throws JcrException caused by {@link RepositoryException} */ public static void set(Node node, String property, Object value) { try { @@ -327,7 +327,7 @@ public class Jcr { } else // try with toString() prop.setValue(value.toString()); } catch (RepositoryException e) { - throw new IllegalStateException("Cannot set property " + property + " of " + node + " to " + value, e); + throw new JcrException("Cannot set property " + property + " of " + node + " to " + value, e); } } @@ -337,7 +337,7 @@ public class Jcr { * @return the value of * {@link Node#getProperty(String)}.{@link Property#getString()} or * null if the property does not exist. - * @throws IllegalStateException caused by {@link RepositoryException} + * @throws JcrException caused by {@link RepositoryException} */ public static String get(Node node, String property) { return get(node, property, null); @@ -350,7 +350,7 @@ public class Jcr { * @return the value of * {@link Node#getProperty(String)}.{@link Property#getString()} or * defaultValue if the property does not exist. - * @throws IllegalStateException caused by {@link RepositoryException} + * @throws JcrException caused by {@link RepositoryException} */ public static String get(Node node, String property, String defaultValue) { try { @@ -368,7 +368,7 @@ public class Jcr { } else return defaultValue; } catch (RepositoryException e) { - throw new IllegalStateException("Cannot retrieve property " + property + " from " + node); + throw new JcrException("Cannot retrieve property " + property + " from " + node, e); } } @@ -377,7 +377,7 @@ public class Jcr { * * @return {@link Node#getProperty(String)} or null if the property * does not exist. - * @throws IllegalStateException caused by {@link RepositoryException} + * @throws JcrException caused by {@link RepositoryException} */ public static Value getValue(Node node, String property) { try { @@ -386,7 +386,7 @@ public class Jcr { else return null; } catch (RepositoryException e) { - throw new IllegalStateException("Cannot retrieve property " + property + " from " + node); + throw new JcrException("Cannot retrieve property " + property + " from " + node, e); } } @@ -396,7 +396,7 @@ public class Jcr { * @return the value of {@link Node#getProperty(String)} or * defaultValue if the property does not exist. * @throws IllegalArgumentException if the value could not be cast - * @throws IllegalStateException in case of unexpected + * @throws JcrException in case of unexpected * {@link RepositoryException} */ @SuppressWarnings("unchecked") @@ -428,7 +428,7 @@ public class Jcr { return defaultValue; } } catch (RepositoryException e) { - throw new IllegalStateException("Cannot retrieve property " + property + " from " + node); + throw new JcrException("Cannot retrieve property " + property + " from " + node, e); } } @@ -447,7 +447,7 @@ public class Jcr { try { return node.getSession(); } catch (RepositoryException e) { - throw new IllegalStateException("Cannot retrieve session related to " + node, e); + throw new JcrException("Cannot retrieve session related to " + node, e); } } @@ -456,7 +456,16 @@ public class Jcr { try { return session.getRootNode(); } catch (RepositoryException e) { - throw new IllegalStateException("Cannot get root node for " + session, e); + throw new JcrException("Cannot get root node for " + session, e); + } + } + + /** Whether this item exists. */ + public static boolean itemExists(Session session, String path) { + try { + return session.itemExists(path); + } catch (RepositoryException e) { + throw new JcrException("Cannot check whether " + path + " exists", e); } } @@ -474,7 +483,7 @@ public class Jcr { if (session.hasPendingChanges()) session.save(); } catch (RepositoryException e) { - throw new IllegalStateException("Cannot save session related to " + node + " in workspace " + throw new JcrException("Cannot save session related to " + node + " in workspace " + session(node).getWorkspace().getName(), e); } } @@ -517,7 +526,7 @@ public class Jcr { Session session = node.getSession(); JcrUtils.addPrivilege(session, node.getPath(), principal, privilege); } catch (RepositoryException e) { - throw new IllegalStateException("Cannot add privilege " + privilege + " to " + node, e); + throw new JcrException("Cannot add privilege " + privilege + " to " + node, e); } } @@ -529,7 +538,7 @@ public class Jcr { try { return node.isCheckedOut(); } catch (RepositoryException e) { - throw new IllegalStateException("Cannot retrieve checked out status of " + node, e); + throw new JcrException("Cannot retrieve checked out status of " + node, e); } } @@ -538,7 +547,7 @@ public class Jcr { try { versionManager(node).checkpoint(node.getPath()); } catch (RepositoryException e) { - throw new IllegalStateException("Cannot check in " + node, e); + throw new JcrException("Cannot check in " + node, e); } } @@ -547,7 +556,7 @@ public class Jcr { try { versionManager(node).checkin(node.getPath()); } catch (RepositoryException e) { - throw new IllegalStateException("Cannot check in " + node, e); + throw new JcrException("Cannot check in " + node, e); } } @@ -556,7 +565,7 @@ public class Jcr { try { versionManager(node).checkout(node.getPath()); } catch (RepositoryException e) { - throw new IllegalStateException("Cannot check out " + node, e); + throw new JcrException("Cannot check out " + node, e); } } @@ -565,7 +574,7 @@ public class Jcr { try { return node.getSession().getWorkspace().getVersionManager(); } catch (RepositoryException e) { - throw new IllegalStateException("Cannot get version manager from " + node, e); + throw new JcrException("Cannot get version manager from " + node, e); } } @@ -574,7 +583,7 @@ public class Jcr { try { return versionManager(node).getVersionHistory(node.getPath()); } catch (RepositoryException e) { - throw new IllegalStateException("Cannot get version history from " + node, e); + throw new JcrException("Cannot get version history from " + node, e); } } @@ -592,7 +601,7 @@ public class Jcr { Collections.reverse(lst); return lst; } catch (RepositoryException e) { - throw new IllegalStateException("Cannot get linear versions from " + versionHistory, e); + throw new JcrException("Cannot get linear versions from " + versionHistory, e); } } @@ -601,7 +610,7 @@ public class Jcr { try { return version.getFrozenNode(); } catch (RepositoryException e) { - throw new IllegalStateException("Cannot get frozen node from " + version, e); + throw new JcrException("Cannot get frozen node from " + version, e); } } @@ -610,7 +619,7 @@ public class Jcr { try { return versionManager(node).getBaseVersion(node.getPath()); } catch (RepositoryException e) { - throw new IllegalStateException("Cannot get base version from " + node, e); + throw new JcrException("Cannot get base version from " + node, e); } } @@ -628,7 +637,7 @@ public class Jcr { throw new IllegalArgumentException(fileNode + " must be a file."); return getBinarySize(fileNode.getNode(Node.JCR_CONTENT).getProperty(Property.JCR_DATA).getBinary()); } catch (RepositoryException e) { - throw new IllegalStateException("Cannot get file size of " + fileNode, e); + throw new JcrException("Cannot get file size of " + fileNode, e); } } @@ -639,7 +648,7 @@ public class Jcr { return binary.getSize(); } } catch (RepositoryException e) { - throw new IllegalStateException("Cannot get file size of binary " + binaryArg, e); + throw new JcrException("Cannot get file size of binary " + binaryArg, e); } } -- 2.30.2