Skip to content

Commit

Permalink
cosmetic: reformat code to comply with our coding styles, add license…
Browse files Browse the repository at this point in the history
… headers
  • Loading branch information
stefanseifert committed Oct 12, 2023
1 parent d0676c2 commit 63ae06f
Show file tree
Hide file tree
Showing 5 changed files with 290 additions and 168 deletions.
Original file line number Diff line number Diff line change
@@ -1,49 +1,78 @@
/*
* #%L
* wcm.io
* %%
* Copyright (C) 2019 wcm.io
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
package io.wcm.testing.mock.aem.xf;

import static com.adobe.cq.xf.ExperienceFragmentsConstants.PN_XF_VARIANT_TYPE;
import static com.adobe.cq.xf.ExperienceFragmentsConstants.RT_EXPERIENCE_FRAGMENT_PAGE;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import org.apache.commons.lang3.StringUtils;
import org.apache.sling.api.resource.ValueMap;

import com.adobe.cq.xf.ExperienceFragment;
import com.adobe.cq.xf.ExperienceFragmentVariation;
import com.day.cq.commons.Filter;
import com.day.cq.wcm.api.Page;
import org.apache.commons.lang3.StringUtils;
import org.apache.sling.api.resource.ValueMap;

import java.util.*;

import static com.adobe.cq.xf.ExperienceFragmentsConstants.PN_XF_VARIANT_TYPE;
import static com.adobe.cq.xf.ExperienceFragmentsConstants.RT_EXPERIENCE_FRAGMENT_PAGE;

/**
* Mock implementation of {@link ExperienceFragment}.
*/
public class MockExperienceFragment extends MockExperienceFragmentBase implements ExperienceFragment {
public MockExperienceFragment(Page page) {
super(page);
}

public List<ExperienceFragmentVariation> getVariations() {
List<ExperienceFragmentVariation> variations = new ArrayList<>();
Iterator<Page> it = getPage().listChildren(element -> element.getContentResource().isResourceType(RT_EXPERIENCE_FRAGMENT_PAGE));
while (it.hasNext()) {
Page thePage = it.next();
variations.add(thePage.adaptTo(ExperienceFragmentVariation.class));
}
return variations;
public MockExperienceFragment(Page page) {
super(page);
}

@Override
public List<ExperienceFragmentVariation> getVariations() {
List<ExperienceFragmentVariation> variations = new ArrayList<>();
Iterator<Page> it = getPage().listChildren(element -> element.getContentResource().isResourceType(RT_EXPERIENCE_FRAGMENT_PAGE));
while (it.hasNext()) {
Page thePage = it.next();
variations.add(thePage.adaptTo(ExperienceFragmentVariation.class));
}
return variations;
}

public List<ExperienceFragmentVariation> getVariations(String... type) {
final Set<String> typeValues = new HashSet<>(List.of(type));
Filter<Page> typeFilter = element -> {
ValueMap properties = element.getProperties();
String variantType = properties.get(PN_XF_VARIANT_TYPE, "");
if (StringUtils.isEmpty(variantType))
return false;
return typeValues.contains(variantType);
};
List<ExperienceFragmentVariation> variations = new ArrayList<>();
for (Iterator<Page> it = getPage().listChildren(typeFilter); it.hasNext(); ) {
Page page = it.next();
variations.add(page.adaptTo(ExperienceFragmentVariation.class));
}
return variations;
@Override
public List<ExperienceFragmentVariation> getVariations(String... type) {
final Set<String> typeValues = new HashSet<>(List.of(type));
Filter<Page> typeFilter = element -> {
ValueMap properties = element.getProperties();
String variantType = properties.get(PN_XF_VARIANT_TYPE, "");
if (StringUtils.isEmpty(variantType)) {
return false;
}
return typeValues.contains(variantType);
};
List<ExperienceFragmentVariation> variations = new ArrayList<>();
for (Iterator<Page> it = getPage().listChildren(typeFilter); it.hasNext();) {
Page page = it.next();
variations.add(page.adaptTo(ExperienceFragmentVariation.class));
}
}
return variations;
}

}
Original file line number Diff line number Diff line change
@@ -1,43 +1,64 @@
/*
* #%L
* wcm.io
* %%
* Copyright (C) 2019 wcm.io
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
package io.wcm.testing.mock.aem.xf;

import com.adobe.cq.xf.ExperienceFragment;
import com.adobe.cq.xf.ExperienceFragmentVariation;
import com.adobe.cq.xf.ExperienceFragmentsConstants;
import com.day.cq.wcm.api.Page;
import org.apache.sling.api.adapter.AdapterFactory;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.osgi.annotation.versioning.ProviderType;
import org.osgi.service.component.annotations.Component;

import com.adobe.cq.xf.ExperienceFragment;
import com.adobe.cq.xf.ExperienceFragmentVariation;
import com.adobe.cq.xf.ExperienceFragmentsConstants;
import com.day.cq.wcm.api.Page;

/**
* Mock adapter factory for AEM Experience Fragment-related adaptions.
*/
@Component(service = AdapterFactory.class,
property = {
AdapterFactory.ADAPTABLE_CLASSES + "=com.day.cq.wcm.api.Page",
AdapterFactory.ADAPTER_CLASSES + "=com.adobe.cq.xf.ExperienceFragment",
AdapterFactory.ADAPTER_CLASSES + "=com.adobe.cq.xf.ExperienceFragmentVariation"
})
property = {
AdapterFactory.ADAPTABLE_CLASSES + "=com.day.cq.wcm.api.Page",
AdapterFactory.ADAPTER_CLASSES + "=com.adobe.cq.xf.ExperienceFragment",
AdapterFactory.ADAPTER_CLASSES + "=com.adobe.cq.xf.ExperienceFragmentVariation"
})
@ProviderType
public class MockExperienceFragmentAdapterFactory implements AdapterFactory {

@SuppressWarnings("unchecked")
@Override
public @Nullable <AdapterType> AdapterType getAdapter(@NotNull Object object, @NotNull Class<AdapterType> type) {
if (object instanceof Page) {
Page page = (Page) object;
if (page.getContentResource().isResourceType(ExperienceFragmentsConstants.RT_EXPERIENCE_FRAGMENT_MASTER)) {
if (type == ExperienceFragment.class) {
return (AdapterType) new MockExperienceFragment(page);
}
}
if (page.getContentResource().isResourceType(ExperienceFragmentsConstants.RT_EXPERIENCE_FRAGMENT_PAGE)) {
if (type == ExperienceFragmentVariation.class) {
return (AdapterType) new MockExperienceFragmentVariation(page);
}
}
@SuppressWarnings("unchecked")
@Override
public @Nullable <AdapterType> AdapterType getAdapter(@NotNull Object object, @NotNull Class<AdapterType> type) {
if (object instanceof Page) {
Page page = (Page)object;
if (page.getContentResource().isResourceType(ExperienceFragmentsConstants.RT_EXPERIENCE_FRAGMENT_MASTER)) {
if (type == ExperienceFragment.class) {
return (AdapterType)new MockExperienceFragment(page);
}
}
if (page.getContentResource().isResourceType(ExperienceFragmentsConstants.RT_EXPERIENCE_FRAGMENT_PAGE)) {
if (type == ExperienceFragmentVariation.class) {
return (AdapterType)new MockExperienceFragmentVariation(page);
}
return null;
}
}
return null;
}

}
Original file line number Diff line number Diff line change
@@ -1,49 +1,72 @@
/*
* #%L
* wcm.io
* %%
* Copyright (C) 2019 wcm.io
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
package io.wcm.testing.mock.aem.xf;

import com.day.cq.commons.inherit.HierarchyNodeInheritanceValueMap;
import com.day.cq.commons.inherit.InheritanceValueMap;
import com.day.cq.wcm.api.Page;
import java.util.Arrays;
import java.util.List;

import org.apache.sling.api.adapter.SlingAdaptable;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ValueMap;

import java.util.Arrays;
import java.util.List;
import com.day.cq.commons.inherit.HierarchyNodeInheritanceValueMap;
import com.day.cq.commons.inherit.InheritanceValueMap;
import com.day.cq.wcm.api.Page;

public class MockExperienceFragmentBase extends SlingAdaptable {
private final Page page;

protected MockExperienceFragmentBase(Page page) {
this.page = page;
}
private final Page page;

public String getPath() {
return page.getPath();
}
protected MockExperienceFragmentBase(Page page) {
this.page = page;
}

public ValueMap getProperties() {
return page.getProperties();
}
public String getPath() {
return page.getPath();
}

public List<String> getCloudserviceConfigurationsPaths() {
return Arrays.asList(getInheritedProperties().getInherited("cq:cloudserviceconfigs", new String[0]));
}
public ValueMap getProperties() {
return page.getProperties();
}

protected InheritanceValueMap getInheritedProperties() {
return new HierarchyNodeInheritanceValueMap(page.getContentResource());
}
public List<String> getCloudserviceConfigurationsPaths() {
return Arrays.asList(getInheritedProperties().getInherited("cq:cloudserviceconfigs", new String[0]));
}

public <AdapterType> AdapterType adaptTo(Class<AdapterType> type) {
if (type == Resource.class) {
return (AdapterType) page.adaptTo(Resource.class);
}
if (type == Page.class) {
return (AdapterType) page;
}
return super.adaptTo(type);
}
protected InheritanceValueMap getInheritedProperties() {
return new HierarchyNodeInheritanceValueMap(page.getContentResource());
}

protected Page getPage() {
return page;
@Override
public <AdapterType> AdapterType adaptTo(Class<AdapterType> type) {
if (type == Resource.class) {
return (AdapterType)page.adaptTo(Resource.class);
}
if (type == Page.class) {
return (AdapterType)page;
}
}
return super.adaptTo(type);
}

protected Page getPage() {
return page;
}

}
Loading

0 comments on commit 63ae06f

Please sign in to comment.