View Javadoc
1   /**
2    * This file Copyright (c) 2008-2015 Magnolia International
3    * Ltd.  (http://www.magnolia-cms.com). All rights reserved.
4    *
5    *
6    * This file is dual-licensed under both the Magnolia
7    * Network Agreement and the GNU General Public License.
8    * You may elect to use one or the other of these licenses.
9    *
10   * This file is distributed in the hope that it will be
11   * useful, but AS-IS and WITHOUT ANY WARRANTY; without even the
12   * implied warranty of MERCHANTABILITY or FITNESS FOR A
13   * PARTICULAR PURPOSE, TITLE, or NONINFRINGEMENT.
14   * Redistribution, except as permitted by whichever of the GPL
15   * or MNA you select, is prohibited.
16   *
17   * 1. For the GPL license (GPL), you can redistribute and/or
18   * modify this file under the terms of the GNU General
19   * Public License, Version 3, as published by the Free Software
20   * Foundation.  You should have received a copy of the GNU
21   * General Public License, Version 3 along with this program;
22   * if not, write to the Free Software Foundation, Inc., 51
23   * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
24   *
25   * 2. For the Magnolia Network Agreement (MNA), this file
26   * and the accompanying materials are made available under the
27   * terms of the MNA which accompanies this distribution, and
28   * is available at http://www.magnolia-cms.com/mna.html
29   *
30   * Any modifications to this file must keep this entire header
31   * intact.
32   *
33   */
34  package info.magnolia.module.cache;
35  
36  import info.magnolia.cms.core.Content;
37  import info.magnolia.cms.core.HierarchyManager;
38  import info.magnolia.cms.core.NodeData;
39  import info.magnolia.cms.core.Path;
40  import info.magnolia.module.InstallContext;
41  import info.magnolia.module.delta.AbstractTask;
42  import info.magnolia.module.delta.Task;
43  import info.magnolia.module.delta.TaskExecutionException;
44  
45  import java.security.InvalidParameterException;
46  import java.util.Iterator;
47  
48  import javax.jcr.RepositoryException;
49  
50  /**
51   * Adds repository to the list of repositories observed for cache flushing upon activation.
52   * Tasks checks for existence of the repository in the list before adding it so it is safe to execute multiple times.
53   *
54   * @deprecated since 5.4. All workspaces are registered by default.
55   * @see AbstractListeningFlushPolicy
56   */
57  public class RegisterWorkspaceForCacheFlushingTask extends AbstractTask implements Task {
58  
59      private String workspaceName;
60  
61      public RegisterWorkspaceForCacheFlushingTask(String workspaceName) {
62          super("Cache flushing", "Updates the cache flushing configuration to trigger cache flush when new or updated content is published to " + workspaceName + " workspace.");
63          this.workspaceName = workspaceName;
64          if (workspaceName == null) {
65              throw new InvalidParameterException("Workspace name can't be empty.");
66          }
67      }
68  
69      @Override
70      public void execute(InstallContext ctx) throws TaskExecutionException {
71          HierarchyManager hm = ctx.getConfigHierarchyManager();
72          try {
73              String nodePath = "/modules/cache/config/configurations/default/flushPolicy/policies/flushAll/repositories";
74              if (!ctx.getModulesNode().hasContent("cache") || !hm.isExist(nodePath)) {
75                  // cache is not installed or other then default flush policy is used - ignore
76                  return;
77              }
78              Content c = hm.getContent(nodePath);
79              // check if the workspace is not already registered manually by user. If so, just bail out, no need to punish users who registered workspaces previously themselves with the error message.
80              Iterator iter = c.getNodeDataCollection().iterator();
81              boolean found = false;
82              while (iter.hasNext()) {
83                  if (this.workspaceName.equals(((NodeData) iter.next()).getString())) {
84                      found = true;
85                      break;
86                  }
87              }
88              if (!found) {
89                  c.createNodeData(Path.getUniqueLabel(c, "0"), this.workspaceName);
90              }
91          } catch (RepositoryException e) {
92              throw new TaskExecutionException(e.getMessage(), e);
93          }
94      }
95  }