blob: 73f216bc3749d03587451d3129b79e04481d745e [file] [log] [blame]
/*
* Copyright 2000-2009 JetBrains s.r.o.
*
* 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.
*/
package com.intellij.util.xmlb;
import com.intellij.openapi.util.JDOMUtil;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.IOException;
import java.lang.reflect.Array;
import java.net.URL;
public class XmlSerializer {
private static final SerializationFilter TRUE_FILTER = new SerializationFilter() {
@Override
public boolean accepts(Accessor accessor, Object bean) {
return true;
}
};
private XmlSerializer() {
}
/**
* Consider to use {@link SkipDefaultValuesSerializationFilters}
*/
public static Element serialize(@NotNull Object object) throws XmlSerializationException {
return serialize(object, TRUE_FILTER);
}
@NotNull
public static Element serialize(@NotNull Object object, @Nullable SerializationFilter filter) throws XmlSerializationException {
return new XmlSerializerImpl(filter == null ? TRUE_FILTER : filter).serialize(object);
}
@Nullable
public static <T> T deserialize(Document document, Class<T> aClass) throws XmlSerializationException {
return deserialize(document.getRootElement(), aClass);
}
@Nullable
@SuppressWarnings({"unchecked"})
public static <T> T deserialize(Element element, Class<T> aClass) throws XmlSerializationException {
try {
return (T)XmlSerializerImpl.getBinding(aClass).deserialize(null, element);
}
catch (XmlSerializationException e) {
throw e;
}
catch (Exception e) {
throw new XmlSerializationException(e);
}
}
public static <T> T[] deserialize(Element[] elements, Class<T> aClass) throws XmlSerializationException {
//noinspection unchecked
T[] result = (T[])Array.newInstance(aClass, elements.length);
for (int i = 0; i < result.length; i++) {
result[i] = deserialize(elements[i], aClass);
}
return result;
}
@Nullable
public static <T> T deserialize(URL url, Class<T> aClass) throws XmlSerializationException {
try {
Document document = JDOMUtil.loadDocument(url);
document = JDOMXIncluder.resolve(document, url.toExternalForm());
return deserialize(document.getRootElement(), aClass);
}
catch (IOException e) {
throw new XmlSerializationException(e);
}
catch (JDOMException e) {
throw new XmlSerializationException(e);
}
}
public static void deserializeInto(@NotNull Object bean, @NotNull Element element) {
try {
final Binding binding = XmlSerializerImpl.getBinding(bean.getClass());
assert binding instanceof BeanBinding;
((BeanBinding)binding).deserializeInto(bean, element);
}
catch (XmlSerializationException e) {
throw e;
}
catch (Exception e) {
throw new XmlSerializationException(e);
}
}
public static void serializeInto(final Object bean, final Element element) {
serializeInto(bean, element, null);
}
public static void serializeInto(final Object bean, final Element element, @Nullable SerializationFilter filter) {
if (filter == null) {
filter = TRUE_FILTER;
}
try {
final Binding binding = XmlSerializerImpl.getBinding(bean.getClass());
assert binding instanceof BeanBinding;
((BeanBinding)binding).serializeInto(bean, element, filter);
}
catch (XmlSerializationException e) {
throw e;
}
catch (Exception e) {
throw new XmlSerializationException(e);
}
}
}