Clover icon

Google Sitemap Module 2.4.3

  1. Project Clover database Thu May 11 2017 16:52:32 CEST
  2. Package info.magnolia.module.googlesitemap.app.subapp.sitemapdetail.contentconnector

File SitemapContentConnector.java

 

Coverage histogram

../../../../../../../../img/srcFileCovDistChart7.png
48% of files have more coverage

Code metrics

16
28
8
1
143
86
16
0.57
3.5
8
2
10.3% of code in this file is excluded from these metrics.

Classes

Class Line # Actions
SitemapContentConnector 53 28 10.3% 16 19
0.6346153663.5%
 

Contributing tests

This file is covered by 6 tests. .

Source view

1    /**
2    * This file Copyright (c) 2014-2017 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.googlesitemap.app.subapp.sitemapdetail.contentconnector;
35   
36    import info.magnolia.module.googlesitemap.app.subapp.sitemapdetail.util.SiteMapEntryContainer;
37    import info.magnolia.module.googlesitemap.bean.SiteMapEntry;
38    import info.magnolia.module.googlesitemap.service.SiteMapService;
39    import info.magnolia.ui.api.app.SubAppContext;
40    import info.magnolia.ui.contentapp.detail.DetailLocation;
41    import info.magnolia.ui.vaadin.integration.contentconnector.ContentConnector;
42   
43    import javax.inject.Inject;
44   
45    import org.apache.commons.lang3.StringUtils;
46   
47    import com.vaadin.data.Item;
48    import com.vaadin.data.util.BeanItem;
49   
50    /**
51    * {@link ContentConnector} implementation capable of handling {@link SiteMapEntry} objects.
52    */
 
53    public class SitemapContentConnector implements ContentConnector {
54   
55    public static final String SEPARATOR = "@";
56   
57    private final DetailLocation siteMapLocation;
58   
59    private SiteMapService siteMapService;
60   
61    private SiteMapEntryContainer container;
62   
63    private SitemapContentConnectorDefinition definition;
64   
 
65  6 toggle @Inject
66    public SitemapContentConnector(SitemapContentConnectorDefinition definition, SiteMapService siteMapService, SubAppContext subAppContext) {
67  6 this.definition = definition;
68  6 this.siteMapLocation = DetailLocation.wrap(subAppContext.getLocation());
69  6 this.siteMapService = siteMapService;
70  6 this.container = new SiteMapEntryContainer(getSitemapPath(), this.definition.isVirtualUris(), this.siteMapService);
71    }
72   
 
73  3 toggle @Override
74    public String getItemUrlFragment(Object itemId) {
75  3 if (itemId instanceof SiteMapEntry) {
76  3 SiteMapEntry entry = (SiteMapEntry)itemId;
77  3 return getSitemapPath() + SEPARATOR + entry.getPath();
78    }
79  0 return getSitemapPath();
80    }
81   
 
82  4 toggle @Override
83    public SiteMapEntry getItemIdByUrlFragment(String urlFragment) {
84  4 if (urlFragment.startsWith(siteMapLocation.getNodePath())) {
85  4 return findEntry(parsePageName(urlFragment));
86    }
87  0 return null;
88    }
89   
 
90    toggle @Override
91    public Object getDefaultItemId() {
92    return new Object();
93    }
94   
 
95  1 toggle @Override
96    public Item getItem(Object itemId) {
97  1 if (itemId instanceof SiteMapEntry) {
98  1 return new BeanItem<SiteMapEntry>((SiteMapEntry) itemId);
99    }
100  0 return null;
101    }
102   
 
103  0 toggle @Override
104    public SiteMapEntry getItemId(Item item) {
105  0 if (item instanceof BeanItem) {
106  0 Object bean = ((BeanItem)item).getBean();
107  0 if (bean instanceof SiteMapEntry) {
108  0 return (SiteMapEntry)bean;
109    }
110    }
111  0 return null;
112    }
113   
 
114  2 toggle @Override
115    public boolean canHandleItem(Object itemId) {
116  2 return itemId instanceof SiteMapEntry;
117    }
118   
 
119  4 toggle private SiteMapEntry findEntry(String pagePath) {
120  4 if (!StringUtils.isBlank(pagePath)) {
121  4 SiteMapEntry id = container.firstItemId();
122  7 while (id != null) {
123  7 if (id.getPath().equals(pagePath)) {
124  4 return id;
125    }
126  3 id = container.nextItemId(id);
127    }
128    }
129  0 return null;
130    }
131   
 
132    toggle public String getSitemapPath() {
133    return StringUtils.substringBefore(siteMapLocation.getNodePath(), SEPARATOR);
134    }
135   
 
136    toggle public SiteMapEntryContainer getContainer() {
137    return container;
138    }
139   
 
140  4 toggle private String parsePageName(String urlFragment) {
141  4 return StringUtils.substringAfterLast(urlFragment, SEPARATOR);
142    }
143    }