Skip to content

Commit

Permalink
Deprecate ScoreJacksonJsonSerializer + add jackson changes in upgrade…
Browse files Browse the repository at this point in the history
… recipe
  • Loading branch information
ge0ffrey committed Mar 26, 2018
1 parent 2d6eefb commit 50618a4
Show file tree
Hide file tree
Showing 32 changed files with 96 additions and 83 deletions.
Expand Up @@ -16,17 +16,9 @@

package org.optaplanner.persistence.jackson.api;

import com.fasterxml.jackson.databind.BeanDescription;
import com.fasterxml.jackson.databind.BeanProperty;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.Module;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationConfig;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.BeanSerializerModifier;
import com.fasterxml.jackson.databind.ser.ContextualSerializer;
import org.optaplanner.core.api.score.Score;
import org.optaplanner.core.api.score.buildin.bendable.BendableScore;
import org.optaplanner.core.api.score.buildin.bendablebigdecimal.BendableBigDecimalScore;
Expand All @@ -43,7 +35,6 @@
import org.optaplanner.core.api.score.buildin.simplelong.SimpleLongScore;
import org.optaplanner.persistence.jackson.api.score.PolymorphicScoreJacksonJsonDeserializer;
import org.optaplanner.persistence.jackson.api.score.PolymorphicScoreJacksonJsonSerializer;
import org.optaplanner.persistence.jackson.api.score.ScoreJacksonJsonSerializer;
import org.optaplanner.persistence.jackson.api.score.buildin.bendable.BendableScoreJacksonJsonDeserializer;
import org.optaplanner.persistence.jackson.api.score.buildin.bendable.BendableScoreJacksonJsonSerializer;
import org.optaplanner.persistence.jackson.api.score.buildin.bendablebigdecimal.BendableBigDecimalScoreJacksonJsonDeserializer;
Expand Down
@@ -0,0 +1,63 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates.
*
* 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 org.optaplanner.persistence.jackson.api.score;

import java.io.IOException;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.BeanProperty;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.ContextualSerializer;
import org.optaplanner.core.api.score.Score;
import org.optaplanner.persistence.jackson.api.OptaPlannerJacksonModule;

/**
* Jackson binding support for a {@link Score} subtype.
* For a {@link Score} field, use {@link PolymorphicScoreJacksonJsonSerializer} instead,
* so the score type is recorded too and it can be deserialized.
* <p>
* For example: use {@code @JsonSerialize(using = HardSoftScoreJacksonJsonSerializer.class) @JsonDeserialize(using = HardSoftScoreJacksonJsonDeserializer.class)}
* on a {@code HardSoftScore score} field and it will marshalled to JSON as {@code "score":"-999hard/-999soft"}.
* Or better yet, use {@link OptaPlannerJacksonModule} instead.
* @see Score
* @param <Score_> the actual score type
*/
public abstract class AbstractScoreJacksonJsonSerializer<Score_ extends Score<Score_>> extends JsonSerializer<Score_>
implements ContextualSerializer {

@Override
public JsonSerializer<?> createContextual(SerializerProvider provider, BeanProperty property)
throws JsonMappingException {
JavaType propertyType = property.getType();
if (Score.class.equals(propertyType.getRawClass())) {
// If the property type is Score (not HardSoftScore for example),
// delegate to PolymorphicScoreJacksonJsonSerializer instead to write the score type too
// This presumes that OptaPlannerJacksonModule is registered
return provider.findValueSerializer(propertyType);
}
return this;
}

@Override
public void serialize(Score_ score, JsonGenerator generator, SerializerProvider serializers) throws IOException {
generator.writeString(score.toString());
}

}
@@ -1,5 +1,5 @@
/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates.
* Copyright 2018 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand All @@ -26,21 +26,13 @@
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.ContextualSerializer;
import org.optaplanner.core.api.score.Score;
import org.optaplanner.persistence.jackson.api.OptaPlannerJacksonModule;
import org.optaplanner.persistence.jackson.api.score.buildin.hardsoft.HardSoftScoreJacksonJsonSerializer;

/**
* Jackson binding support for a {@link Score} subtype.
* For a {@link Score} field, use {@link PolymorphicScoreJacksonJsonSerializer} instead,
* so the score type is recorded too and it can be deserialized.
* <p>
* For example: use {@code @JsonSerialize(using = HardSoftScoreJacksonJsonSerializer.class) @JsonDeserialize(using = HardSoftScoreJacksonJsonDeserializer.class)}
* on a {@code HardSoftScore score} field and it will marshalled to JSON as {@code "score":"-999hard/-999soft"}.
* Or better yet, use {@link OptaPlannerJacksonModule} instead.
* <p>
* Do not use ScoreJacksonJsonSerializer directly: in 8.0 this will become an abstract class and renamed to AbstractScoreJacksonJsonSerializer.
* @see Score
* @param <Score_> the actual score type
* This class will be removed in 8.0.
* @deprecated in favor of {@link HardSoftScoreJacksonJsonSerializer} and variants.
*/
@Deprecated
public class ScoreJacksonJsonSerializer<Score_ extends Score<Score_>> extends JsonSerializer<Score_>
implements ContextualSerializer {

Expand Down
Expand Up @@ -17,13 +17,12 @@
package org.optaplanner.persistence.jackson.api.score.buildin.bendable;

import org.optaplanner.core.api.score.buildin.bendable.BendableScore;
import org.optaplanner.core.api.score.buildin.hardmediumsoft.HardMediumSoftScore;
import org.optaplanner.persistence.jackson.api.score.ScoreJacksonJsonSerializer;
import org.optaplanner.persistence.jackson.api.score.AbstractScoreJacksonJsonSerializer;

@SuppressWarnings("checkstyle:javadocstyle")
/**
* {@inheritDoc}
*/
public class BendableScoreJacksonJsonSerializer extends ScoreJacksonJsonSerializer<BendableScore> {
public class BendableScoreJacksonJsonSerializer extends AbstractScoreJacksonJsonSerializer<BendableScore> {

}
Expand Up @@ -16,14 +16,13 @@

package org.optaplanner.persistence.jackson.api.score.buildin.bendablebigdecimal;

import org.optaplanner.core.api.score.buildin.bendable.BendableScore;
import org.optaplanner.core.api.score.buildin.bendablebigdecimal.BendableBigDecimalScore;
import org.optaplanner.persistence.jackson.api.score.ScoreJacksonJsonSerializer;
import org.optaplanner.persistence.jackson.api.score.AbstractScoreJacksonJsonSerializer;

@SuppressWarnings("checkstyle:javadocstyle")
/**
* {@inheritDoc}
*/
public class BendableBigDecimalScoreJacksonJsonSerializer extends ScoreJacksonJsonSerializer<BendableBigDecimalScore> {
public class BendableBigDecimalScoreJacksonJsonSerializer extends AbstractScoreJacksonJsonSerializer<BendableBigDecimalScore> {

}
Expand Up @@ -16,14 +16,13 @@

package org.optaplanner.persistence.jackson.api.score.buildin.bendablelong;

import org.optaplanner.core.api.score.buildin.bendable.BendableScore;
import org.optaplanner.core.api.score.buildin.bendablelong.BendableLongScore;
import org.optaplanner.persistence.jackson.api.score.ScoreJacksonJsonSerializer;
import org.optaplanner.persistence.jackson.api.score.AbstractScoreJacksonJsonSerializer;

@SuppressWarnings("checkstyle:javadocstyle")
/**
* {@inheritDoc}
*/
public class BendableLongScoreJacksonJsonSerializer extends ScoreJacksonJsonSerializer<BendableLongScore> {
public class BendableLongScoreJacksonJsonSerializer extends AbstractScoreJacksonJsonSerializer<BendableLongScore> {

}
Expand Up @@ -17,13 +17,12 @@
package org.optaplanner.persistence.jackson.api.score.buildin.hardmediumsoft;

import org.optaplanner.core.api.score.buildin.hardmediumsoft.HardMediumSoftScore;
import org.optaplanner.core.api.score.buildin.hardmediumsoftlong.HardMediumSoftLongScore;
import org.optaplanner.persistence.jackson.api.score.ScoreJacksonJsonSerializer;
import org.optaplanner.persistence.jackson.api.score.AbstractScoreJacksonJsonSerializer;

@SuppressWarnings("checkstyle:javadocstyle")
/**
* {@inheritDoc}
*/
public class HardMediumSoftScoreJacksonJsonSerializer extends ScoreJacksonJsonSerializer<HardMediumSoftScore> {
public class HardMediumSoftScoreJacksonJsonSerializer extends AbstractScoreJacksonJsonSerializer<HardMediumSoftScore> {

}
Expand Up @@ -17,12 +17,12 @@
package org.optaplanner.persistence.jackson.api.score.buildin.hardmediumsoftbigdecimal;

import org.optaplanner.core.api.score.buildin.hardmediumsoftbigdecimal.HardMediumSoftBigDecimalScore;
import org.optaplanner.persistence.jackson.api.score.ScoreJacksonJsonSerializer;
import org.optaplanner.persistence.jackson.api.score.AbstractScoreJacksonJsonSerializer;

@SuppressWarnings("checkstyle:javadocstyle")
/**
* {@inheritDoc}
*/
public class HardMediumSoftBigDecimalScoreJacksonJsonSerializer extends ScoreJacksonJsonSerializer<HardMediumSoftBigDecimalScore> {
public class HardMediumSoftBigDecimalScoreJacksonJsonSerializer extends AbstractScoreJacksonJsonSerializer<HardMediumSoftBigDecimalScore> {

}
Expand Up @@ -16,15 +16,13 @@

package org.optaplanner.persistence.jackson.api.score.buildin.hardmediumsoftlong;

import org.optaplanner.core.api.score.buildin.hardmediumsoftbigdecimal.HardMediumSoftBigDecimalScore;
import org.optaplanner.core.api.score.buildin.hardmediumsoftlong.HardMediumSoftLongScore;
import org.optaplanner.core.api.score.buildin.hardsoft.HardSoftScore;
import org.optaplanner.persistence.jackson.api.score.ScoreJacksonJsonSerializer;
import org.optaplanner.persistence.jackson.api.score.AbstractScoreJacksonJsonSerializer;

@SuppressWarnings("checkstyle:javadocstyle")
/**
* {@inheritDoc}
*/
public class HardMediumSoftLongScoreJacksonJsonSerializer extends ScoreJacksonJsonSerializer<HardMediumSoftLongScore> {
public class HardMediumSoftLongScoreJacksonJsonSerializer extends AbstractScoreJacksonJsonSerializer<HardMediumSoftLongScore> {

}
Expand Up @@ -17,13 +17,12 @@
package org.optaplanner.persistence.jackson.api.score.buildin.hardsoft;

import org.optaplanner.core.api.score.buildin.hardsoft.HardSoftScore;
import org.optaplanner.core.api.score.buildin.simple.SimpleScore;
import org.optaplanner.persistence.jackson.api.score.ScoreJacksonJsonSerializer;
import org.optaplanner.persistence.jackson.api.score.AbstractScoreJacksonJsonSerializer;

@SuppressWarnings("checkstyle:javadocstyle")
/**
* {@inheritDoc}
*/
public class HardSoftScoreJacksonJsonSerializer extends ScoreJacksonJsonSerializer<HardSoftScore> {
public class HardSoftScoreJacksonJsonSerializer extends AbstractScoreJacksonJsonSerializer<HardSoftScore> {

}
Expand Up @@ -17,13 +17,12 @@
package org.optaplanner.persistence.jackson.api.score.buildin.hardsoftbigdecimal;

import org.optaplanner.core.api.score.buildin.hardsoftbigdecimal.HardSoftBigDecimalScore;
import org.optaplanner.core.api.score.buildin.hardsoftdouble.HardSoftDoubleScore;
import org.optaplanner.persistence.jackson.api.score.ScoreJacksonJsonSerializer;
import org.optaplanner.persistence.jackson.api.score.AbstractScoreJacksonJsonSerializer;

@SuppressWarnings("checkstyle:javadocstyle")
/**
* {@inheritDoc}
*/
public class HardSoftBigDecimalScoreJacksonJsonSerializer extends ScoreJacksonJsonSerializer<HardSoftBigDecimalScore> {
public class HardSoftBigDecimalScoreJacksonJsonSerializer extends AbstractScoreJacksonJsonSerializer<HardSoftBigDecimalScore> {

}
Expand Up @@ -17,13 +17,12 @@
package org.optaplanner.persistence.jackson.api.score.buildin.hardsoftdouble;

import org.optaplanner.core.api.score.buildin.hardsoftdouble.HardSoftDoubleScore;
import org.optaplanner.core.api.score.buildin.hardsoftlong.HardSoftLongScore;
import org.optaplanner.persistence.jackson.api.score.ScoreJacksonJsonSerializer;
import org.optaplanner.persistence.jackson.api.score.AbstractScoreJacksonJsonSerializer;

@SuppressWarnings("checkstyle:javadocstyle")
/**
* {@inheritDoc}
*/
public class HardSoftDoubleScoreJacksonJsonSerializer extends ScoreJacksonJsonSerializer<HardSoftDoubleScore> {
public class HardSoftDoubleScoreJacksonJsonSerializer extends AbstractScoreJacksonJsonSerializer<HardSoftDoubleScore> {

}
Expand Up @@ -17,13 +17,12 @@
package org.optaplanner.persistence.jackson.api.score.buildin.hardsoftlong;

import org.optaplanner.core.api.score.buildin.hardsoftlong.HardSoftLongScore;
import org.optaplanner.core.api.score.buildin.simple.SimpleScore;
import org.optaplanner.persistence.jackson.api.score.ScoreJacksonJsonSerializer;
import org.optaplanner.persistence.jackson.api.score.AbstractScoreJacksonJsonSerializer;

@SuppressWarnings("checkstyle:javadocstyle")
/**
* {@inheritDoc}
*/
public class HardSoftLongScoreJacksonJsonSerializer extends ScoreJacksonJsonSerializer<HardSoftLongScore> {
public class HardSoftLongScoreJacksonJsonSerializer extends AbstractScoreJacksonJsonSerializer<HardSoftLongScore> {

}
Expand Up @@ -16,18 +16,13 @@

package org.optaplanner.persistence.jackson.api.score.buildin.simple;

import java.io.IOException;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import org.optaplanner.core.api.score.buildin.simple.SimpleScore;
import org.optaplanner.persistence.jackson.api.score.AbstractScoreJacksonJsonDeserializer;
import org.optaplanner.persistence.jackson.api.score.ScoreJacksonJsonSerializer;
import org.optaplanner.persistence.jackson.api.score.AbstractScoreJacksonJsonSerializer;

@SuppressWarnings("checkstyle:javadocstyle")
/**
* {@inheritDoc}
*/
public class SimpleScoreJacksonJsonSerializer extends ScoreJacksonJsonSerializer<SimpleScore> {
public class SimpleScoreJacksonJsonSerializer extends AbstractScoreJacksonJsonSerializer<SimpleScore> {

}
Expand Up @@ -16,14 +16,13 @@

package org.optaplanner.persistence.jackson.api.score.buildin.simplebigdecimal;

import org.optaplanner.core.api.score.buildin.simple.SimpleScore;
import org.optaplanner.core.api.score.buildin.simplebigdecimal.SimpleBigDecimalScore;
import org.optaplanner.persistence.jackson.api.score.ScoreJacksonJsonSerializer;
import org.optaplanner.persistence.jackson.api.score.AbstractScoreJacksonJsonSerializer;

@SuppressWarnings("checkstyle:javadocstyle")
/**
* {@inheritDoc}
*/
public class SimpleBigDecimalScoreJacksonJsonSerializer extends ScoreJacksonJsonSerializer<SimpleBigDecimalScore> {
public class SimpleBigDecimalScoreJacksonJsonSerializer extends AbstractScoreJacksonJsonSerializer<SimpleBigDecimalScore> {

}
Expand Up @@ -16,14 +16,13 @@

package org.optaplanner.persistence.jackson.api.score.buildin.simpledouble;

import org.optaplanner.core.api.score.buildin.simple.SimpleScore;
import org.optaplanner.core.api.score.buildin.simpledouble.SimpleDoubleScore;
import org.optaplanner.persistence.jackson.api.score.ScoreJacksonJsonSerializer;
import org.optaplanner.persistence.jackson.api.score.AbstractScoreJacksonJsonSerializer;

@SuppressWarnings("checkstyle:javadocstyle")
/**
* {@inheritDoc}
*/
public class SimpleDoubleScoreJacksonJsonSerializer extends ScoreJacksonJsonSerializer<SimpleDoubleScore> {
public class SimpleDoubleScoreJacksonJsonSerializer extends AbstractScoreJacksonJsonSerializer<SimpleDoubleScore> {

}
Expand Up @@ -16,14 +16,13 @@

package org.optaplanner.persistence.jackson.api.score.buildin.simplelong;

import org.optaplanner.core.api.score.buildin.simple.SimpleScore;
import org.optaplanner.core.api.score.buildin.simplelong.SimpleLongScore;
import org.optaplanner.persistence.jackson.api.score.ScoreJacksonJsonSerializer;
import org.optaplanner.persistence.jackson.api.score.AbstractScoreJacksonJsonSerializer;

@SuppressWarnings("checkstyle:javadocstyle")
/**
* {@inheritDoc}
*/
public class SimpleLongScoreJacksonJsonSerializer extends ScoreJacksonJsonSerializer<SimpleLongScore> {
public class SimpleLongScoreJacksonJsonSerializer extends AbstractScoreJacksonJsonSerializer<SimpleLongScore> {

}
Expand Up @@ -21,7 +21,6 @@
import org.junit.Test;
import org.optaplanner.core.api.score.buildin.bendable.BendableScore;
import org.optaplanner.persistence.jackson.api.score.AbstractScoreJacksonJsonSerializerAndDeserializerTest;
import org.optaplanner.persistence.jackson.api.score.ScoreJacksonJsonSerializer;

public class BendableScoreJacksonJsonSerializerAndDeserializerTest extends AbstractScoreJacksonJsonSerializerAndDeserializerTest {

Expand Down
Expand Up @@ -23,7 +23,6 @@
import org.junit.Test;
import org.optaplanner.core.api.score.buildin.bendablebigdecimal.BendableBigDecimalScore;
import org.optaplanner.persistence.jackson.api.score.AbstractScoreJacksonJsonSerializerAndDeserializerTest;
import org.optaplanner.persistence.jackson.api.score.ScoreJacksonJsonSerializer;

public class BendableBigDecimalScoreJacksonJsonSerializerAndDeserializerTest extends AbstractScoreJacksonJsonSerializerAndDeserializerTest {

Expand Down
Expand Up @@ -21,7 +21,6 @@
import org.junit.Test;
import org.optaplanner.core.api.score.buildin.bendablelong.BendableLongScore;
import org.optaplanner.persistence.jackson.api.score.AbstractScoreJacksonJsonSerializerAndDeserializerTest;
import org.optaplanner.persistence.jackson.api.score.ScoreJacksonJsonSerializer;

public class BendableLongScoreJacksonJsonSerializerAndDeserializerTest extends AbstractScoreJacksonJsonSerializerAndDeserializerTest {

Expand Down
Expand Up @@ -21,7 +21,6 @@
import org.junit.Test;
import org.optaplanner.core.api.score.buildin.hardmediumsoft.HardMediumSoftScore;
import org.optaplanner.persistence.jackson.api.score.AbstractScoreJacksonJsonSerializerAndDeserializerTest;
import org.optaplanner.persistence.jackson.api.score.ScoreJacksonJsonSerializer;

public class HardMediumSoftScoreJacksonJsonSerializerAndDeserializerTest extends AbstractScoreJacksonJsonSerializerAndDeserializerTest {

Expand Down
Expand Up @@ -23,7 +23,6 @@
import org.junit.Test;
import org.optaplanner.core.api.score.buildin.hardmediumsoftbigdecimal.HardMediumSoftBigDecimalScore;
import org.optaplanner.persistence.jackson.api.score.AbstractScoreJacksonJsonSerializerAndDeserializerTest;
import org.optaplanner.persistence.jackson.api.score.ScoreJacksonJsonSerializer;

public class HardMediumSoftBigDecimalScoreJacksonJsonSerializerAndDeserializerTest extends AbstractScoreJacksonJsonSerializerAndDeserializerTest {

Expand Down

0 comments on commit 50618a4

Please sign in to comment.