io.sphere.sdk.meta.ReleaseNotes Maven / Gradle / Ivy
package io.sphere.sdk.meta;
import io.sphere.sdk.carts.CartLike;
import io.sphere.sdk.carts.CustomLineItem;
import io.sphere.sdk.carts.LineItem;
import io.sphere.sdk.carts.commands.updateactions.SetShippingMethod;
import io.sphere.sdk.carts.expansion.CartExpansionModel;
import io.sphere.sdk.carts.queries.CartByIdGet;
import io.sphere.sdk.categories.Category;
import io.sphere.sdk.channels.queries.ChannelByIdGet;
import io.sphere.sdk.client.SphereApiConfig;
import io.sphere.sdk.client.SphereClient;
import io.sphere.sdk.client.SphereRequest;
import io.sphere.sdk.commands.UpdateActionImpl;
import io.sphere.sdk.commands.UpdateCommand;
import io.sphere.sdk.customobjects.CustomObject;
import io.sphere.sdk.customobjects.commands.CustomObjectDeleteCommand;
import io.sphere.sdk.customobjects.queries.CustomObjectByKeyGet;
import io.sphere.sdk.customobjects.queries.CustomObjectQuery;
import io.sphere.sdk.expansion.ExpansionPath;
import io.sphere.sdk.http.*;
import io.sphere.sdk.models.*;
import io.sphere.sdk.orders.Order;
import io.sphere.sdk.orders.expansion.OrderExpansionModel;
import io.sphere.sdk.payments.Transaction;
import io.sphere.sdk.productdiscounts.queries.ProductDiscountByIdGet;
import io.sphere.sdk.products.*;
import io.sphere.sdk.products.attributes.Attribute;
import io.sphere.sdk.products.attributes.AttributeAccess;
import io.sphere.sdk.products.attributes.AttributeDefinition;
import io.sphere.sdk.products.attributes.LocalizedToStringProductAttributeConverter;
import io.sphere.sdk.products.commands.updateactions.SetMetaDescription;
import io.sphere.sdk.products.commands.updateactions.SetMetaKeywords;
import io.sphere.sdk.products.commands.updateactions.SetMetaTitle;
import io.sphere.sdk.products.expansion.ProductProjectionExpansionModel;
import io.sphere.sdk.products.queries.ProductByIdGet;
import io.sphere.sdk.products.queries.ProductProjectionByIdGet;
import io.sphere.sdk.products.queries.ProductProjectionQuery;
import io.sphere.sdk.products.queries.ProductProjectionQueryModel;
import io.sphere.sdk.producttypes.ProductType;
import io.sphere.sdk.projects.Project;
import io.sphere.sdk.queries.Get;
import io.sphere.sdk.queries.QueryDsl;
import io.sphere.sdk.queries.QueryPredicate;
import io.sphere.sdk.search.SearchKeywords;
import io.sphere.sdk.taxcategories.TaxRate;
import io.sphere.sdk.types.CustomFields;
import io.sphere.sdk.types.CustomFieldsDraft;
import io.sphere.sdk.types.FieldType;
import javax.money.CurrencyUnit;
import java.util.List;
import java.util.Properties;
import java.util.concurrent.CompletionStage;
import java.util.concurrent.TimeUnit;
import java.util.function.BiFunction;
import java.util.function.Function;
/**
Legend
- removed functionality
- added functionality
- breaking change
- bugfix, can include a breaking change
1.0.0-M26 (20.01.2016)
Expand all
- Added {@link io.sphere.sdk.reviews.Review}s.
- Builders for query and search requests. So for example
{@link io.sphere.sdk.products.queries.ProductProjectionQueryBuilder}
to build {@link io.sphere.sdk.products.queries.ProductProjectionQuery} and
{@link io.sphere.sdk.products.search.ProductProjectionSearchBuilder}
to build {@link io.sphere.sdk.products.search.ProductProjectionSearch}.
The new way with builders (code with side effects)
{@include.example io.sphere.sdk.meta.M26Demo#createSearchQueryWithBuilder}
The classic way (immutable objects, reassigning)
{@include.example io.sphere.sdk.meta.M26Demo#createSearchQueryClassicWay()}
- Added customer update actions
{@link io.sphere.sdk.customers.commands.updateactions.SetTitle},
{@link io.sphere.sdk.customers.commands.updateactions.SetFirstName},
{@link io.sphere.sdk.customers.commands.updateactions.SetMiddleName} and
{@link io.sphere.sdk.customers.commands.updateactions.SetLastName}.
- {@link CustomObjectQuery} supports now predicates containing key.
{@include.example io.sphere.sdk.meta.M26Demo#queryCustomObjectsByKeyExample()}
- Added {@link Project#getCurrencies()} and {@link Project#getCurrencyUnits()} so you can get your enabled currencies for the commercetools project.
- Added some short hand methods for the work with product attributes like {@link Attribute#getValueAsLong()} and {@link Attribute#getValueAsString()}. For all see {@link Attribute}.
- Added {@link LocalizedToStringProductAttributeConverter} which provides some defaults to present product attribute (including monetary amounts and date) values as String. The behaviour can be changed through subclasses.
1.0.0-M25 (08.01.2016)
- Support full locales for search endpoint. See #922
1.0.0-M24 (05.01.2016)
- Commercetools responses are gzipped which should result in less traffic and faster responses. {@link HttpResponse#getResponseBody()} returns the unpacked body.
- Added {@link io.sphere.sdk.client.BlockingSphereClient} which does not execute asynchronous: {@include.example io.sphere.sdk.meta.BlockingClientValueGetDemo}
- Added {@link ProductProjectionExpansionModel#allVariants()} for expanding objects in masterVariant and the other variants with one code expression. {@include.example io.sphere.sdk.products.expansion.ProductProjectionExpansionModelTest#allVariants()}
- {@link io.sphere.sdk.meta.GraphQLDocumentation GraphQL Example}
- InputHint for types is optional, so added {@link io.sphere.sdk.types.FieldDefinition#of(FieldType, String, LocalizedString, Boolean)}.
- Ease initialising clients which need a bearer token instead of the client secret:
{@link io.sphere.sdk.client.SphereClientFactory#createClientOfApiConfigAndAccessToken(SphereApiConfig, String)} and
{@link io.sphere.sdk.client.SphereClientFactory#createClientOfApiConfigAndAccessToken(SphereApiConfig, String, HttpClient)}
- {@link ProductDraftBuilder#plusVariants(List)} and {@link ProductDraftBuilder#plusVariants(ProductVariantDraft)}
- Improve error reporting for failed attempts fetching OAuth tokens.
- Added missing transaction query fields.
- {@link io.sphere.sdk.client.SphereClientUtils#blockingWait(CompletionStage, long, TimeUnit)} for waiting for sphere requests
- {@link CartLike#getCurrency()} which gets the currency for a cart or an order
- Added category order hints to search model.
- Added {@link io.sphere.sdk.types.ResourceTypeIdsSetBuilder} which helps to find the resource type ids for creation {@link io.sphere.sdk.types.Type}s.
- {@link ResourceIdentifier}, for example for creating products with the product type key: {@link ProductDraftBuilder#of(ResourceIdentifiable, LocalizedString, LocalizedString, ProductVariantDraft)}
- Added {@link ProductVariant#isMatchingVariant()}.
- Several documentation improvements.
- Renamed methods like "ofLocalizable*" to "ofLocalized*". (the old methods are deprecated)
- Renamed duplicated classes like "*Type" to "*AttributeType" and "*FieldType". (direct change, no deprecation possible)
- Use {@link io.sphere.sdk.client.TestDoubleSphereClientFactory#createHttpTestDouble(Function)}
and {@link io.sphere.sdk.client.TestDoubleSphereClientFactory#createObjectTestDouble(Function)} instead of methods from {@link io.sphere.sdk.client.SphereClientFactory} for test doubles.
- In the properties config the default auth url is wrong. See 889.
- The review classes are removed.
1.0.0-M23 (09.12.2015)
- Create a cart including shipping and billing address as well as with items. See {@link io.sphere.sdk.carts.CartDraftBuilder}
- Improved Order Query, query by (custom) line items, billing and shipping address, discount codes and custom fields.
- Query {@link io.sphere.sdk.types.Type}s by resourceTypeIds and fieldDefinitions.
- Query {@link Order} by empty or not empty syncInfo.
- Added {@link QueryDsl#plusSort(List)}.
- Added query predicates for createdAt and lastModifiedAt.
- Added isIn() query for enum constants like {@link io.sphere.sdk.states.StateType}.
- Added {@link ProductProjectionQuery#bySku(List)}.
- Added {@link io.sphere.sdk.taxcategories.queries.TaxCategoryByIdGet}.
- {@link io.sphere.sdk.client.SphereClientFactory} also auto discovers the Apache HTTP client SDK module if this is in the classpath and not the Async HTTP Client module.
- Added {@link CustomFields#getFieldsJsonMap()}.
- Primitive scalar values are now as wrapper classes defined (int to Long, long to Long)
- {@link io.sphere.sdk.cartdiscounts.DiscountedLineItemPriceForQuantity} and {@link io.sphere.sdk.carts.commands.updateactions.RemoveLineItem} uses long for quantity.
- {@link Versioned#getVersion()} is of type {@link Long} instead of long.
- Http core: {@link io.sphere.sdk.http.FormUrlEncodedHttpRequestBody} did not respect the order of elements and possible duplicates.
Use {@link io.sphere.sdk.http.FormUrlEncodedHttpRequestBody#of(List)} for construction and {@link FormUrlEncodedHttpRequestBody#getParameters()} for getting the data.
{@link FormUrlEncodedHttpRequestBody#getData()} is deprecated.
- Added {@link io.sphere.sdk.client.SphereClientConfig#ofProperties(Properties, String)} to get the commercetools credentials form a properties file.
- For SDK contributors: integration test credentials can be set via a properties file
1.0.0-M22 (01.12.2015)
- {@link AttributeDefinition#getIsRequired()} and {@link AttributeDefinition#getIsSearchable()} ()} have been
deprecated in favor of {@link AttributeDefinition#isRequired()} and {@link AttributeDefinition#isSearchable}.
- Added new Payment actions:
{@link io.sphere.sdk.payments.commands.updateactions.ChangeTransactionTimestamp},
{@link io.sphere.sdk.payments.commands.updateactions.ChangeTransactionInteractionId} and
{@link io.sphere.sdk.payments.commands.updateactions.ChangeTransactionState}
- Added {@link Transaction#getId()} and {@link Transaction#getState()}
- {@link Transaction} has been split to {@link io.sphere.sdk.payments.TransactionDraft} as input object
and {@link Transaction} as output object of the API.
- Fixed method typo {@link ProductProjection#findVariantBySky(String)}, use {@link ProductProjection#findVariantBySku(String)}
1.0.0-M21 (25.11.2015)
- Introduced the possibility to perform faceted search on products, for more information see the {@link io.sphere.sdk.meta.SearchDocumentation search documentation}, section Faceted Search.
- Added getters {@link io.sphere.sdk.search.SearchExpression#value()} and {@link io.sphere.sdk.search.FacetExpression#alias()} for the Search API.
- Added helper method {@link io.sphere.sdk.search.model.RangeTermFacetSearchModel#allRanges()} to request a range facet for all values.
- Validates the provided parameters in filter and facet expressions in order to avoid generating wrong requests.
- Deprecated {@code io.sphere.sdk.search.model.RangeFacetBaseSearchModel#onlyRangeAsString(java.lang.String, java.lang.String)} in favour of a more generic {@code io.sphere.sdk.search.model.RangeFacetBaseSearchModel#onlyRangeAsString(FacetRange)}.
- Added static constructors to all facet/filter/sort search model classes, to easily build customized search expressions.
- Since {@link io.sphere.sdk.search.model.SortSearchModel} implementation classes have now static factory constructors, these class constructors have been removed from the public API.
- Renamed {@code Range} filter/facet search models to {@code RangeTerm} to emphasize that you can build both range and term oriented search expressions with them.
- ExpansionPath for shippingInfo fields: {@link CartExpansionModel#shippingInfo()} and {@link OrderExpansionModel#shippingInfo()}
- {@link ProductType#getKey()}
- {@link io.sphere.sdk.producttypes.ProductTypeDraft#of(String, String, List)} has been deprecated in favor of {@link io.sphere.sdk.producttypes.ProductTypeDraft#of(String, String, String, List)} since it is a very good practice to create a {@link ProductType} with a key.
- {@link SetShippingMethod#ofRemove()} to be able to remove a {@link io.sphere.sdk.shippingmethods.ShippingMethod} from a {@link io.sphere.sdk.carts.Cart}
- {@link io.sphere.sdk.orders.commands.OrderFromCartCreateCommand} contains an example
- Support for currencies like Yen.
- create {@link javax.money.MonetaryAmount} with centAmount: {@link io.sphere.sdk.utils.MoneyImpl#ofCents(long, CurrencyUnit)}
- Add {@code state} field to QueryModel for Products, Reviews and Orders.
- Custom fields for prices: {@link Price#getCustom()}
- For custom fields in prices the HTTP API and hence the SDK differentiate now between {@link Price} and {@link io.sphere.sdk.products.PriceDraft}.
Places where {@link io.sphere.sdk.products.PriceDraft} has to be used:
- {@link io.sphere.sdk.products.commands.updateactions.AddPrice}
- {@link io.sphere.sdk.products.commands.updateactions.ChangePrice}
- {@link io.sphere.sdk.products.ProductVariantDraftBuilder#price(PriceDraft)}
- {@link io.sphere.sdk.products.ProductVariantDraftBuilder#prices(List)}
- {@link io.sphere.sdk.products.commands.updateactions.AddVariant}
To roughly compare a {@link Price} with a {@link io.sphere.sdk.products.PriceDraft}, use {@link PriceDraft#of(Price)} to create a draft out of the price and then compare the drafts.
1.0.0-M20 (02.11.2015)
- {@code query.withSort(m -> m.createdAt().sort(DESC));} is deprecated, use it with {@code query.withSort(m -> m.createdAt().sort().desc());}
- Duplicates with {@link io.sphere.sdk.queries.ExperimentalReactiveStreamUtils#publisherOf(QueryDsl, SphereClient)} on multiple parallel request(n) calls. See 809.
- Logger name shows query string. See 802.
- Missing Content-Length header in Async HTTP Client. See 799.
- variantIdentifier in {@link LineItem} is null. See 771.
1.0.0-M19 (16.10.2015)
Expand all
- The Search API now allows multi-sort by accepting a list of {@link io.sphere.sdk.search.SortExpression} instead of a single value.
- Introduced explicit Set product custom attribute models to build search expressions (i.e. facets, filters and sort expressions).
- Introduced methods {@link io.sphere.sdk.search.PagedSearchResult#getTermFacetResult}, {@link io.sphere.sdk.search.PagedSearchResult#getRangeFacetResult} and {@link io.sphere.sdk.search.PagedSearchResult#getFilteredFacetResult} that accept the facet path.
- Introduced search filter methods {@link io.sphere.sdk.search.model.TermFilterSearchModel#byAny} and {@link io.sphere.sdk.search.model.TermFilterSearchModel#byAll} (OR and AND semantics, respectively), along with the counterpart for range filters{@link io.sphere.sdk.search.model.RangeTermFilterSearchModel#byAnyRange} and {@link io.sphere.sdk.search.model.RangeTermFilterSearchModel#byAllRanges}), change that affected the signature of all filter methods which now return a list of {@link io.sphere.sdk.search.FilterExpression} instead of a single value.
- The Search Sort Model offers now the methods {@link io.sphere.sdk.search.model.SortSearchModel#byAsc} and {@link io.sphere.sdk.search.model.SortSearchModel#byDesc}, as well as {@link io.sphere.sdk.search.model.MultiValueSortSearchModel#byAscWithMax} and {@link io.sphere.sdk.search.model.MultiValueSortSearchModel#byDescWithMin} for multi-valued attributes.
- Removed {@code io.sphere.sdk.search.UntypedSearchModel} class and instead provide methods to give filter and facet parameters as simple strings.
{@include.example io.sphere.sdk.products.search.ProductProjectionSearchFiltersIntegrationTest#filterByValueAsString}
- While before the Search Model was built using the structure {@code attribute + action + parameters}, now it changed to {@code action + attribute + parameters}, in order to split the model into 3 independent models: Search Filter Model, Search Facet Model and Search Sort Model.
Before it looked like:
{@code
ProductProjectionSearch search = ProductProjectionSearch.ofStaged()
.plusQueryFilters(product -> product.name().locale(ENGLISH).filtered().by("shoes"));
PagedSearchResult result = client.execute(search);
}
Now it is built as follows:
{@code
ProductProjectionSearch search = ProductProjectionSearch.ofStaged()
.plusQueryFilters(filter -> filter.name().locale(ENGLISH).by("shoes"));
PagedSearchResult result = client.execute(search);
}
- Renamed {@code SearchSort} to {@link io.sphere.sdk.search.SortExpression}, which now shares the same properties as {@link io.sphere.sdk.search.FacetExpression} and {@link io.sphere.sdk.search.FilterExpression} under the {@link io.sphere.sdk.search.SearchExpression} interface.
- The static factory method to directly build unsafe {@link io.sphere.sdk.search.FacetExpression} is now located in {@link io.sphere.sdk.search.TermFacetExpression}, {@link io.sphere.sdk.search.RangeFacetExpression} and {@link io.sphere.sdk.search.FilteredFacetExpression}, so that a facet expression for the corresponding type is obtained.
- Moved related Search Model classes from {@code io.sphere.sdk.search} to {@code io.sphere.sdk.search.model} package, to clearly separate the Search Model from the Search API classes.
- Removed type parameters from {@link io.sphere.sdk.search.TermFacetResult}, {@link io.sphere.sdk.search.RangeFacetResult} and {@link io.sphere.sdk.search.FilteredFacetResult}, which now return simple strings as they are received from the platform.
- Added {@link ProductProjection#getCategoryOrderHints()} and {@link ProductProjectionQueryModel#categoryOrderHints()}. It can be used for search as shown in the following example, but the meta model comes in a later release.
{@include.example io.sphere.sdk.products.ProductCategoryOrderHintTest#searchForCategoryAndSort()}
- Added states and update actions for Orders, Reviews and Products: {@link Order#getState()}, {@link io.sphere.sdk.products.Product#getState()}, {@code io.sphere.sdk.reviews.Review#getState()}
- Added {@link LineItem#getTotalPrice()}, {@link LineItem#getDiscountedPricePerQuantity()}, {@link CustomLineItem#getTotalPrice()} and {@link CustomLineItem#getDiscountedPricePerQuantity()}
- Deprecated {@link LineItem#getDiscountedPrice()} and {@link CustomLineItem#getDiscountedPrice()} since they are deprecated in the HTTP API
- Improved documentation of {@link io.sphere.sdk.models.Versioned}.
- Added {@link io.sphere.sdk.payments.Payment}.
- Deprecated typo method {@link io.sphere.sdk.carts.CartDraft#witCustom(CustomFieldsDraft)}, use {@link io.sphere.sdk.carts.CartDraft#withCustom(CustomFieldsDraft)} instead.
- Deprecated {@link io.sphere.sdk.customers.queries.CustomerByTokenGet}, use {@link io.sphere.sdk.customers.queries.CustomerByPasswordTokenGet} instead.
- Added {@link io.sphere.sdk.customobjects.queries.CustomObjectByIdGet} and {@link CustomObjectDeleteCommand#of(String, Long, Class)} which can delete a {@link CustomObject} by ID.
- Simplified CustomObject endpoints. Instead of a {@link com.fasterxml.jackson.core.type.TypeReference} for the endpoint result only the class of the value of the custom object needs to be provided.
Before:
{@code final CustomObjectQuery query = CustomObjectQuery.of(new TypeReference>>(){});}
After:
{@code final CustomObjectQuery query = CustomObjectQuery.of(Pojo.class);}
This change applies for other endpoints, too.
-
Deprecations in custom object endpoints:
- {@link CustomObjectDeleteCommand#of(io.sphere.sdk.customobjects.CustomObject)}
- use instead {@link CustomObjectDeleteCommand#ofJsonNode(CustomObject)}
- {@link CustomObjectDeleteCommand#of(java.lang.String, java.lang.String)}
- use instead {@link CustomObjectDeleteCommand#ofJsonNode(java.lang.String, java.lang.String)}
- {@link CustomObjectByKeyGet#of(java.lang.String, java.lang.String)}
- use instead {@link CustomObjectByKeyGet#ofJsonNode(java.lang.String, java.lang.String)}
- {@link CustomObjectQuery#of()}
- use instead {@link CustomObjectQuery#ofJsonNode()}
- Don't include customer password in logs. See 767.
1.0.0-M18 (01.10.2015)
- {@link io.sphere.sdk.products.search.ProductProjectionSearch#withFuzzy(Boolean)}
- documentation of the customer flow in {@link io.sphere.sdk.customers.Customer}
- {@link io.sphere.sdk.types.Custom custom fields}
- Improved error reporting for status code 413 and 414.
- {@link io.sphere.sdk.search.TermStats} contains not anymore "T" and "F" but "true" and "false".
- deprecate {@link io.sphere.sdk.customers.commands.CustomerCreateTokenCommand}, use {@link io.sphere.sdk.customers.commands.CustomerCreatePasswordTokenCommand} instead
- DiscountedLineItemPrice money field is called value not money. See 711.
1.0.0-M17 (28.08.2015)
- Support of full locales like "de_DE"
- {@link io.sphere.sdk.products.ProductProjection} is also a {@link io.sphere.sdk.models.Versioned} for {@link io.sphere.sdk.products.Product}
- {@link AttributeAccess#ofInteger()}, {@link AttributeAccess#ofIntegerSet()}, {@link AttributeAccess#ofLong()}, {@link AttributeAccess#ofLongSet()}
- {@link io.sphere.sdk.taxcategories.commands.TaxCategoryUpdateCommand}
- {@link io.sphere.sdk.products.ProductDraftBuilder#taxCategory(Referenceable)}, {@link io.sphere.sdk.products.ProductDraftBuilder#searchKeywords(SearchKeywords)}
- {@code Reference
} and {@code Reference
- {@link UpdateCommand#getUpdateActions()}
- {@link io.sphere.sdk.products.messages.ProductPublishedMessage}, {@link io.sphere.sdk.products.messages.ProductUnpublishedMessage}
- {@link io.sphere.sdk.models.Address#equalsIgnoreId(Address)}, {@link io.sphere.sdk.products.Price#equalsIgnoreId(Price)}, {@link io.sphere.sdk.taxcategories.TaxRate#equalsIgnoreId(TaxRate)}
1.0.0-M16 (06.08.2015)
This release is intended to be the last release before 1.0.0-RC1.
- {@link io.sphere.sdk.productdiscounts.commands.ProductDiscountCreateCommand},
{@link io.sphere.sdk.productdiscounts.commands.ProductDiscountUpdateCommand},
{@link io.sphere.sdk.productdiscounts.commands.ProductDiscountDeleteCommand},
{@link ProductDiscountByIdGet},
{@link io.sphere.sdk.productdiscounts.queries.ProductDiscountQuery}
- More reference expansion for product fields.
- Added a {@link ProductAttributeDocumentation product attribute tutorial}.
- Added a {@link CategoryDocumentation category tutorial}.
- Added the {@link io.sphere.sdk.messages.queries.MessageQuery message endpoint}.
- Added query and expansion meta models for carts.
- {@link io.sphere.sdk.utils.MoneyImpl#ofCents(long, CurrencyUnit)} can be used to create monetary values
- Customer can be created with attributes dateOfBirth, companyName, vatId, isEmailVerified, customerGroup and addresses.
- External images can be included in the product creation.
- Added {@link io.sphere.sdk.inventory.commands.updateactions.ChangeQuantity} to update {@link io.sphere.sdk.inventory.InventoryEntry}s.
- Added {@link io.sphere.sdk.channels.ChannelRole#PRODUCT_DISTRIBUTION}.
- Added {@link LineItem#getDistributionChannel()}.
- Meta models can be used in the product search, too. See {@link io.sphere.sdk.products.search.ProductProjectionSearch#plusFacetFilters(Function)}.
- Added documentation how to query for large offsets in {@link QueryDocumentation}.
- Added hints how to format date and monetary data in {@link FormattingDocumentation}.
- Added {@link io.sphere.sdk.producttypes.commands.ProductTypeUpdateCommand}.
- To imrove the query speed the calculation of the total amount of items in commercetools platform can be deactivated with {@link io.sphere.sdk.products.queries.ProductQuery#withFetchTotal(boolean)}.
- {@link QueryPredicate}s can be negated with {@link QueryPredicate#negate()}
- Added {@link io.sphere.sdk.carts.CartState#ORDERED} and {@link Order#getCart()}.
- Added {@link io.sphere.sdk.products.ProductProjection#findVariantBySky(String)}.
- Reference expansion for the product projection search.
- The default behaviour of queries changed, things are not sorted by ID by default for performance reasons. The impact is that performing the exact query again may yields different results.
- {@link java.util.Optional} as return type for optional values has been removed, now the annotation {@link javax.annotation.Nullable} is used to mark objects as not mandatory. This change was necessary to provide a stable API, to provide later serializable Objects and sparse representations for objects.
- For API read objects primitives have been replaced by wrapper classed to implement later sparse representations. This may affect type conversions which won't work anymore.
- The instantiation of the {@link io.sphere.sdk.client.SphereClient} has been changed, see {@link GettingStarted} and {@link io.sphere.sdk.client.SphereClientFactory}.
- Product type creation has been refactored. Have a look at {@link ProductAttributeDocumentation product attribute tutorial}.
- Product prices have an ID and price updates need to be performed via the price ID: {@link io.sphere.sdk.products.commands.updateactions.ChangePrice}, {@link io.sphere.sdk.products.commands.updateactions.RemovePrice}. Keep in mind that {@link io.sphere.sdk.products.Price#equals(Object)} includes the ID.
- The naming conventions in the commercetools platform have been changed:
- PlainEnumValue is now EnumValue
- LocalizedStrings is now LocalizedString
- LocalizedStringsEntry is now LocalizedStringEntry
- Fetch is now Get (e.g. {@code ProductProjectionByIdFetch} is now {@link ProductProjectionByIdGet}
- {@code JsonUtils} have been renamed to {@link io.sphere.sdk.json.SphereJsonUtils}, this is an internal utility class working for the commercetools platform context, it is not intended to build apps or libs on it.
- {@code ChannelRoles} have been renamed to {@link io.sphere.sdk.channels.ChannelRole}.
- {@code SearchText} is now {@link io.sphere.sdk.models.LocalizedStringEntry}
- Removed {@code ProductUpdateScope}, so all product update actions update only staged.
- Builders for resources (read objects) have been removed. See {@link TestingDocumentation} to build the objects anyway.
- QueryToFetch adapter has been removed.
- {@link io.sphere.sdk.queries.StringQueryModel#isGreaterThan(Object)} and other methods do not quote strings correctly. See 558.
- Product variant expansion does not work. See 631.
1.0.0-M15 (23.06.2015)
Expand all
- {@code io.sphere.sdk.products.search.ExperimentalProductProjectionSearchModel#productType()} enables you to build search expressions with the Product Type reference of products
- {@link ProductVariant#getIdentifier()} enables to get the product id and the variant id from the variant. This is nice, since this data is often needed and on the product variant level the product ID is not available.
- Error reporting has been improved. Especially if JSON mappings do not fit.
- {@link LineItem#getProductSlug()}
- Send User-Agent head for oauth requests.
- A lot of more reference expansions.
- Reference expansion for single elements of a list, example: {@link io.sphere.sdk.categories.expansion.CategoryExpansionModel#ancestors(int)}.
- Reference expansion for fetch endpoints, e.g., {@link ProductProjectionByIdGet#withExpansionPaths(ExpansionPath)}.
- Set the reference expansion, query predicate and sort expression more convenient (less imports, less class search) with lambdas.
Migration pains: {@code QueryDsl
} will be {@code CategoryQuery}
Benefits of the new API:
{@include.example example.QueryMetaDslDemo#demo1()}
instead of
{@include.example example.QueryMetaDslDemo#demo2()}
In Scala (with add-ons) it will look like val query = ProductProjectionQuery.ofCurrent()
.withPredicateScala(_.productType.id.is("product-type-id-1"))
.withSortScala(_.name.lang(ENGLISH).sort.asc)
.withExpansionPathsScala(_.productType)
-
DSL for expansion of references in a product attribute.
{@include.example io.sphere.sdk.products.expansion.ProductVariantExpansionModelTest#productAttributeReferenceExpansion()}
- {@code io.sphere.sdk.reviews.commands.ReviewDeleteCommand}
- {@link io.sphere.sdk.client.SphereClientConfig#ofEnvironmentVariables(String)} to get the
- The product attributes have been refactored, look at the {@link ProductAttributeDocumentation} how it works now.
- {@link io.sphere.sdk.client.SphereClient} implements {@link AutoCloseable} instead of {@link java.io.Closeable}.
- For timestamps we moved from {@link java.time.Instant} to {@link java.time.ZonedDateTime} since the latter also contains a timezone which better reflects SPHERE.IOs date time data.
- Getting the child categories of a category is not in category anymore but in {@link io.sphere.sdk.categories.CategoryTree#findChildren(Identifiable)}.
- Sphere client does not shutdown actors properly. See #491.
- {@code Category#getPathInTree()}
- {@code ExperimentalProductImageUploadCommand}, but you can find a similar command here: https://github.com/sphereio/sphere-jvm-sdk-experimental-java-add-ons
1.0.0-M14 (27.05.2015)
- New fields in {@link io.sphere.sdk.products.Price}: {@link io.sphere.sdk.products.Price#validFrom} and {@link io.sphere.sdk.products.Price#validUntil}.
- Use {@link io.sphere.sdk.products.queries.ProductProjectionQueryModel#allVariants()} to formulate a predicate for all variants. In SPHERE.IO the json fields masterVariant (object) and variants (array of objects) together contain all variants.
- Using {@link ProductProjectionQuery#ofCurrent()} and {@link ProductProjectionQuery#ofStaged()} saves you the import of {@link ProductProjectionType}.
- {@link CompletionStage} does not support by default timeouts which are quite important in a reactive application so you can decorate the {@link io.sphere.sdk.client.SphereClient} with {@link io.sphere.sdk.client.TimeoutSphereClientDecorator} to get a {@link java.util.concurrent.TimeoutException} after a certain amount of time. But this does NOT cancel the request to SPHERE.IO.
- The {@code io.sphere.sdk.reviews.Review} endpoints and models are implemented, but we suggest to not use it, since {@code io.sphere.sdk.reviews.Review}s cannot be deleted or marked as hidden.
- New endpoint: Use {@link io.sphere.sdk.projects.queries.ProjectGet} to get the currencies, countries and languages of the SPHERE.IO project.
- Categories with SEO meta attributes {@link Category#getMetaTitle()}, {@link Category#getMetaDescription()} and {@link Category#getMetaKeywords()} and
update actions {@link io.sphere.sdk.categories.commands.updateactions.SetMetaTitle}, {@link io.sphere.sdk.categories.commands.updateactions.SetMetaDescription} and {@link io.sphere.sdk.categories.commands.updateactions.SetMetaKeywords}.
- Cart discounts: {@link io.sphere.sdk.cartdiscounts.commands.CartDiscountCreateCommand}.
- Discount codes: {@link io.sphere.sdk.discountcodes.commands.DiscountCodeCreateCommand}.
- {@link io.sphere.sdk.client.SphereApiConfig}, {@link io.sphere.sdk.client.SphereAuthConfig}, {@link io.sphere.sdk.client.SphereClientConfig} validates the input, so for example you cannot enter null or whitespace for the project key.
- Date time attributes in {@code ProductProjectionSearchModel} are using ZonedDateTime instead of LocalDateTime.
- The {@code ProductProjectionSearchModel} has been improved with better naming and better documentation.
- Sort related classes for the Query API have been renamed with a "Query" prefix, to distinguish them from the Search API sort classes.
- {@code io.sphere.sdk.queries.Predicate} has been renamed to {@link io.sphere.sdk.queries.QueryPredicate}.
- The JVM SDK itself uses for tests the assertj assertion methods instead of fest assertions.
- {@code io.sphere.sdk.products.commands.updateactions.SetMetaAttributes} has been removed since it is deprecated in SPHERE.IO.
Use {@link SetMetaTitle},
{@link SetMetaDescription},
{@link SetMetaKeywords} or {@link io.sphere.sdk.products.commands.updateactions.MetaAttributesUpdateActions} for all together.
- Update of the Java Money library to version 1.0 which has some breaking changes in comparison to the release candidates.
- Some predicate methods have been renamed: "isOneOf" to "isIn", "isAnyOf" to "isIn", "isLessThanOrEquals" to "isLessThanOrEqualTo" (analog for greaterThan).
- The exception for a failing {@link io.sphere.sdk.customers.commands.CustomerSignInCommand} shows more problem details. See #397.
- There has been a thread leak if {@code io.sphere.sdk.client.SphereClientFactory#createClient(io.sphere.sdk.client.SphereClientConfig)} was used.
It created twice a http client instance and closed just one.
1.0.0-M13 (21.04.2015)
- {@link LocalizedString#mapValue(BiFunction)} and {@link LocalizedString#stream()}
can be used transform {@link LocalizedString}, for example for creating slugs or formatting.
- Experimental {@link io.sphere.sdk.utils.CompletableFutureUtils} to work with Java 8 Futures.
- {@link AsyncDocumentation} documents how to work with {@link java.util.concurrent.CompletableFuture} and {@link java.util.concurrent.CompletionStage}.
- {@link io.sphere.sdk.models.SphereException}s may give hint to developers how to recover from errors. For example on typical elasticsearch related problems it suggests to reindex the product index.
- The JVM SDK is available for Ning Async HTTP Client 1.8 and 1.9 (incompatible to 1.8).
- State update actions and {@code io.sphere.sdk.states.StateBuilder} contributed by Ansgar Brauner
- Embedded predicates (as used in 'where'-clauses) now support lambda syntax: {@link io.sphere.sdk.products.queries.ProductVariantQueryModel#where(java.util.function.Function)}.
- {@link io.sphere.sdk.orders.queries.OrderQuery#byCustomerId(java.lang.String)} and {@link io.sphere.sdk.orders.queries.OrderQuery#byCustomerEmail(java.lang.String)}
- {@link io.sphere.sdk.channels.commands.ChannelUpdateCommand}
- {@link ChannelByIdGet}
- {@link io.sphere.sdk.customers.queries.CustomerQuery#byEmail(java.lang.String)}
- {@link io.sphere.sdk.client.SphereRequest} has been refactored:
- {@code Function
resultMapper()} is now {@link io.sphere.sdk.client.SphereRequest#deserialize(HttpResponse)}
- {@code boolean canHandleResponse(final HttpResponse response)} is now {@link io.sphere.sdk.client.SphereRequest#canDeserialize(HttpResponse)}
- Artifact IDs start now with "sphere-".
- {@link java.util.concurrent.CompletableFuture} has been replaced with {@link java.util.concurrent.CompletionStage}.
You can convert from {@link java.util.concurrent.CompletionStage} to {@link java.util.concurrent.CompletableFuture} with {@link CompletionStage#toCompletableFuture()}.
The opposite direction can be achieved with assigning {@link java.util.concurrent.CompletableFuture} (implementation) to {@link java.util.concurrent.CompletionStage} (interface).
- Refactoring of {@link io.sphere.sdk.client.SphereClient}, {@code
CompletionStage execute(final SphereRequest sphereRequest)}
is now {@link io.sphere.sdk.client.SphereClient#execute(SphereRequest)} which returns {@link java.util.concurrent.CompletionStage} instead of {@link java.util.concurrent.CompletableFuture}.
- {@link io.sphere.sdk.carts.LineItem#getTaxRate()} is optional.
- {@link io.sphere.sdk.carts.LineItem#getState()} now returns a set instead of a list.
- {@link io.sphere.sdk.products.ProductProjection#getCategories()} now returns a set instead of a list.
- URL encoding of parameters. See #240.
1.0.0-M12 (19.03.2015)
- Added the {@link io.sphere.sdk.orders.commands.OrderImportCommand}.
- Added the nested attributes: {@code io.sphere.sdk.attributes.AttributeAccess#ofNested()} + {@code io.sphere.sdk.attributes.AttributeAccess#ofNestedSet()}.
- The error JSON body from SPHERE.IO responses can be directly extracted as JSON with {@link io.sphere.sdk.client.SphereServiceException#getJsonBody()}.
- {@link io.sphere.sdk.http.HttpResponse} also contains {@link io.sphere.sdk.http.HttpHeaders}.
- Experimental search filter/facet/sort expression model {@code ProductProjectionSearchModel}. See also {@link io.sphere.sdk.meta.SearchDocumentation}.
- The {@link io.sphere.sdk.producttypes.ProductType} creation has been simplified (TextAttributeDefinition, LocalizedStringsAttributeDefinition, ... are just AttributeDefinition), see {@link io.sphere.sdk.producttypes.commands.ProductTypeCreateCommand} how to create them.
- {@link io.sphere.sdk.search.TermFacetResult} and
{@link io.sphere.sdk.search.RangeFacetResult} are using generics.
{@link io.sphere.sdk.search.TermFacetResult} uses long instead of int for some methods like {@link io.sphere.sdk.search.TermFacetResult#getMissing()}.
- Methods in {@link io.sphere.sdk.search.SearchDsl} have been renamed.
- {@code io.sphere.sdk.search.RangeStats#getMean()} now returns a double.
- {@link io.sphere.sdk.http.HttpHeaders} allows reoccurring headers.
- Use of a new toString style, from
io.sphere.sdk.client.HttpRequestIntent@7308a939[httpMethod=POST,path=/categories,headers={},body=Optional[io.sphere.sdk.http.StringHttpRequestBody@216ec9be[body={invalidJson :)]]]
to HttpRequestIntent[httpMethod=POST,path=/categories,headers={},body=Optional[StringHttpRequestBody[body={invalidJson :)]]]
- {@link io.sphere.sdk.client.ErrorResponseException#getMessage()} now returns also the project debug info.
- Incompatibility with Jackson 2.5.1 has been fixed. A cause message was "No suitable constructor found for type [simple type, class io.sphere.sdk.models.ImageImpl]: can not instantiate from JSON object (missing default constructor or creator, or perhaps need to add/enable type information?)"
1.0.0-M11 (03.03.2015)
Overall
- Code examples contain the links to the GitHub source code.
- The {@link io.sphere.sdk.client.SphereClient} architecture has been refactored, so it is now possible to inject access token suppliers and custom HTTP clients.
- {@link AsyncHttpClientAdapter} enables to use a custom underlying Ning HTTP client for settings like proxies or max connections per host.
- The new module {@code java-client-apache-async} contains an {@link ApacheHttpClientAdapter adapter} to use the Apache HTTP client instead of the current default client Ning.
- The {@link io.sphere.sdk.client.QueueSphereClientDecorator} enables to limit the amount of concurrent requests to SPHERE.IO with a task queue.
- {@link io.sphere.sdk.client.SphereAccessTokenSupplierFactory} is a starting point to create custom access token suppliers for one token (either fetched from SPHERE.IO or as String) or auto refreshing for online shops.
- Added {@link io.sphere.sdk.client.SphereRequestDecorator} to decorate {@link io.sphere.sdk.client.SphereRequest}s.
- {@link io.sphere.sdk.meta.ExceptionDocumentation Exception hierarchy}, relocated some exceptions and deleted some.
- Removed SphereBackendException, SphereClientException, JavaConcurrentUtils, Requestable
- Removed ReferenceExistsException, usage as {@code SphereError} from a {@link io.sphere.sdk.client.ErrorResponseException}
- JsonParseException is now {@link io.sphere.sdk.json.JsonException}.
- InvalidQueryOffsetException is replaced with {@link java.lang.IllegalArgumentException}.
- For SDK devs: {@link io.sphere.sdk.http.HttpRequest} has changed tasks and structure, now it contains the full information for a HTTP request whereas now {@link io.sphere.sdk.client.HttpRequestIntent} is an element to describe an endpoint of sphere project independent.
- For SDK devs: {@link io.sphere.sdk.client.JsonEndpoint} moved to the client package
- {@link Get} class names end now with Fetch for consistency, so for example {@code CartFetchById} is now {@link CartByIdGet}.
- {@link io.sphere.sdk.commands.DeleteCommand} implementations don't have {@code ById} or {@code ByKey} in the class name and the {@code of} factory method returns the interface, not the implementation, example {@link io.sphere.sdk.categories.commands.CategoryDeleteCommand#of(io.sphere.sdk.models.Versioned)}.
- LocalizedText* classes have been renamed to LocalizedString.
- Fixed: UnknownCurrencyException #264.
States
- {@link io.sphere.sdk.states.State} models, creation and deletion contributed by Ansgar Brauner
Products
- Added update actions: {@link io.sphere.sdk.products.commands.updateactions.AddVariant}, {@link io.sphere.sdk.products.commands.updateactions.RemoveFromCategory}, {@link io.sphere.sdk.products.commands.updateactions.RemoveVariant}, {@link io.sphere.sdk.products.commands.updateactions.RevertStagedChanges}, {@link io.sphere.sdk.products.commands.updateactions.SetAttribute}, {@link io.sphere.sdk.products.commands.updateactions.SetAttributeInAllVariants}, {@link io.sphere.sdk.products.commands.updateactions.SetSearchKeywords}
1.0.0-M10 (26.01.2015)
- Added {@link io.sphere.sdk.customobjects.CustomObject} models and endpoints. There is also a {@link io.sphere.sdk.meta.CustomObjectDocumentation tutorial for custom objects}.
- Added the {@link io.sphere.sdk.zones.Zone} models and endpoints.
- Added the {@link io.sphere.sdk.shippingmethods.ShippingMethod} models and endpoints.
- Added Typesafe Activator files, so you can edit the SDK on UNIX with {@code ./activator ui} or on Windows with {@code activator ui}.
- Added io.sphere.sdk.client.ConcurrentModificationException which is thrown when an {@link io.sphere.sdk.commands.UpdateCommand} fails because of concurrent usage.
- Added io.sphere.sdk.client.ReferenceExistsException which is thrown when executing a {@link io.sphere.sdk.commands.DeleteCommand} and the resource is referenced by another resource and cannot be deleted before deleting the other resource.
- Added io.sphere.sdk.queries.InvalidQueryOffsetException which is thrown if offset is
not between {@value io.sphere.sdk.queries.Query#MIN_OFFSET} and {@value io.sphere.sdk.queries.Query#MAX_OFFSET}..
- Improved on different location the structure of interfaces so important methods are highlighted bold in the IDE.
- JSON mapping errors are better logged.
- Added update actions for cart: {@link io.sphere.sdk.carts.commands.updateactions.SetShippingMethod} and {@link io.sphere.sdk.carts.commands.updateactions.SetCustomerId}.
- Added update actions for customer: {@link io.sphere.sdk.carts.commands.updateactions.SetCustomerId}.
- Added {@link io.sphere.sdk.models.Referenceable#hasSameIdAs(io.sphere.sdk.models.Referenceable)} to check if a similar object has the same ID.
- Added {@code AttributeAccess#ofName(String)} as alias to {@code io.sphere.sdk.attributes.AttributeAccess#getterSetter(String)}.
- Update action list in update commands do not have the type {@literal List
>} {@literal List extends UpdateAction>}, so you can pass a list of a subclass of {@link UpdateActionImpl}.
Example: {@literal List} can be assigned where {@literal ChangeName} extends {@link UpdateActionImpl}.
- Added {@link io.sphere.sdk.models.Address#of(com.neovisionaries.i18n.CountryCode)}.
- Added {@code io.sphere.sdk.carts.Cart#getLineItem(String)} and {@code io.sphere.sdk.carts.Cart#getCustomLineItem(String)} to find items in a cart.
- Added {@link io.sphere.sdk.products.ProductProjection#getAllVariants()} to receive master variant and all other variants in one call. {@link io.sphere.sdk.products.ProductProjection#getVariants()} just returns all variants except the master variant.
- Added {@link io.sphere.sdk.products.ProductProjection#getVariant(int)} and {@link io.sphere.sdk.products.ProductProjection#getVariantOrMaster(int)} to find a product variant by id.
- Added {@link io.sphere.sdk.products.VariantIdentifier} to have a container to address product variants which needs a product ID and a variant ID.
- added {@link io.sphere.sdk.customers.commands.CustomerDeleteCommand} to delete customers.
- Added {@link io.sphere.sdk.products.commands.updateactions.AddExternalImage} to connect products with images not hosted by SPHERE.IO.
- Added {@link io.sphere.sdk.products.commands.updateactions.RemoveImage} to disconnect images from a product (external images and SPHERE.IO hosted).
- Added {@link io.sphere.sdk.client.SphereAccessTokenSupplier} as authentication method in the {@link io.sphere.sdk.client.SphereClient}.
It is possible to automatically refresh a token or just pass a token to the client, see {@link io.sphere.sdk.client.SphereClientFactory#createClient(io.sphere.sdk.client.SphereApiConfig, io.sphere.sdk.client.SphereAccessTokenSupplier)} and {@link io.sphere.sdk.client.SphereAccessTokenSupplier#ofConstantToken(String)}.
- Product variants are all of type int, was int and long before.
- {@link io.sphere.sdk.models.Reference} is not instantiated with new.
- {@link io.sphere.sdk.http.UrlQueryBuilder} is not instantiated with new.
- io.sphere.sdk.client.SphereErrorResponse is not instantiated with new.
- {@code ClientRequest} has been renamed to {@link io.sphere.sdk.client.SphereRequest} and therefore {@code ClientRequestBase} to {@link io.sphere.sdk.client.SphereRequestBase}.
- {@code ClientRequest} has been renamed to {@link io.sphere.sdk.client.SphereRequest} and therefore {@code ClientRequestBase} to {@link io.sphere.sdk.client.SphereRequestBase}.
- {@code JavaClient} has been renamed to {@link io.sphere.sdk.client.SphereClient} and uses the {@link io.sphere.sdk.client.SphereClientFactory} to initialized a client, {@code JavaClientIml} has been removed, see {@link io.sphere.sdk.meta.GettingStarted}.
The typesafe config library is not used anymore. The class {@code HttpClientTestDouble} has been removed, use {@link io.sphere.sdk.client.SphereClientFactory#createHttpTestDouble(java.util.function.Function)} instead.
{@code SphereRequestExecutor} and {@code SphereRequestExecutorTestDouble} have been removed, use {@link io.sphere.sdk.client.SphereClientFactory#createObjectTestDouble(java.util.function.Function)} instead.
- Money portions in the taxed price is not null. The method name is now {@link io.sphere.sdk.carts.TaxPortion#getAmount()} instead of {@code getMoney()}.
- Fixed JSON serialization and deserialization of {@code ImageDimensions} which caused adding external images to a product to fail.
1.0.0-M9
- Added Known Issues page.
- Added experimental support for uploading product images in variants. See {@code io.sphere.sdk.products.commands.ExperimentalProductImageUploadCommand}.
- Added factory methods for {@code Image}.
- {@code Image} contains directly getters for width {@code Image#getWidth()}
and height {@code Image#getHeight()}.
- {@link io.sphere.sdk.queries.PagedQueryResult} is constructable for empty results. Before this, the SDK throwed an Exception.
- Fields called {@code quantity} are now of type long instead of int.
- Added a documentation page {@link io.sphere.sdk.meta.ConstructionDocumentation how to construct objects}.
1.0.0-M8
- Query models contain id, createdAt and lastModifiedAt for predicates and sorting.
- Introduced endpoints and models for {@link io.sphere.sdk.carts.Cart}s, {@link io.sphere.sdk.customers.Customer}s, {@link io.sphere.sdk.customergroups.CustomerGroup}s and {@link io.sphere.sdk.orders.Order}s.
- Quantity fields are now of type long.
- Classes like {@link ProductByIdGet} take now a string parameter for the ID and not an {@link io.sphere.sdk.models.Identifiable}.
- Queries, Fetches, Commands and Searches are only instantiable with an static of method like {@link io.sphere.sdk.categories.commands.CategoryCreateCommand#of(io.sphere.sdk.categories.CategoryDraft)}. The instantiation by constructor is not supported anymore.
- Enum constant names are only in upper case.
1.0.0-M7
- Incompatible change: Classes to create templates for new entries in SPHERE.IO like {@code NewCategory} have been renamed to {@link io.sphere.sdk.categories.CategoryDraft}.
- Incompatible change: {@link io.sphere.sdk.producttypes.ProductTypeDraft} has now only
factory methods with an explicit parameter for the attribute declarations to prevent to use
the getter {@link io.sphere.sdk.producttypes.ProductTypeDraft#getAttributes()} and list add operations.
- Incompatible change: {@code LocalizedString} has been renamed to {@link LocalizedString}, since it is not a container for one string and a locale, but for multiple strings of different locals. It is like a map.
- Incompatible change: The {@link Get} classes have been renamed. From FetchRESOURCEByWhatever to RESOURCEFetchByWhatever
- Moved Scala and Play clients out of the Git repository to https://github.com/sphereio/sphere-jvm-sdk-scala-add-ons. The artifact ID changed.
- {@link io.sphere.sdk.meta.SphereResources} contains now also a listing of queries and commands for the resources.
- Added {@link io.sphere.sdk.products.search.ProductProjectionSearch} for full-text, filtered and faceted search.
- Incompatible change: {@code io.sphere.sdk.products.ProductUpdateScope} makes it more visible that product update operations can be for only staged or for current and staged. The product update actions will be affected by that.
- Implemented anonymous carts.
1.0.0-M6
- Usage of Java money instead of custom implementation.
- Introduce {@link io.sphere.sdk.products.queries.ProductProjectionQuery}.
- Introduce {@link io.sphere.sdk.meta.QueryDocumentation} to document the query API.
1.0.0-M5
- Fixed client shutdown problem.
- Put {@link io.sphere.sdk.models.MetaAttributes MetaAttributes} in common module and make it an interface.
- Add {@link io.sphere.sdk.products.ProductProjection#isPublished()}.
- Add {@link io.sphere.sdk.productdiscounts.ProductDiscount ProductDiscount} models.
- Add {@link io.sphere.sdk.categories.Category#getExternalId() external id fields and methods} for categories.
- Make {@link io.sphere.sdk.products.ProductCatalogData#getCurrent()} return an optional {@link io.sphere.sdk.products.ProductData}, since current should not be accessible if {@link io.sphere.sdk.products.ProductCatalogData#isPublished()} returns false.
- Make masterVariant in {@link io.sphere.sdk.products.ProductDraftBuilder} mandatory.
1.0.0-M4
- Replacing joda time library with Java 8 DateTime API.
- Removing dependency to Google Guava.
- Rename artifact organization to {@code io.sphere.sdk.jvm}.
- Rename {@code JsonUtils.readObjectFromJsonFileInClasspath} to {@code JsonUtils.readObjectFromResource}.
- Reduced the number of SBT modules to speed up travis builds since the resolving of artifacts for every module is slow. In addition fewer JARs needs to be downloaded.
- Introduced {@link io.sphere.sdk.products.ProductProjection}s.
- Javadoc does contain a table of content box for h3 headings.
1.0.0-M3
- The query model can now be accessed by it's Query class, e.g., {@code io.sphere.sdk.categories.queries.CategoryQuery#model()}.
- Added a {@link io.sphere.sdk.meta.GettingStarted Getting Started} page.
- Added a {@link io.sphere.sdk.meta.JvmSdkFeatures Features of the SDK} page.
- Addad a legacy Play Java client for Play Framework 2.2.x.
- Added {@link io.sphere.sdk.products.PriceBuilder}.
- Further null checks.
- Add a lot of a Javadoc, in general for the packages.
- {@link io.sphere.sdk.categories.CategoryTree#of(java.util.List)} instead of CategoryTreeFactory is to be used for creating a category tree.
- Move {@link io.sphere.sdk.models.AddressBuilder} out of the {@link io.sphere.sdk.models.Address} class.
- Performed a lot of renamings like the {@code requests} package to {@code http}
- Moved commands and queries to own packages for easier discovery.
- Introduced new predicates for inequality like {@link io.sphere.sdk.queries.StringQueryModel#isGreaterThanOrEqualTo(String)},
{@link io.sphere.sdk.queries.StringQueryModel#isNot(String)},
{@code io.sphere.sdk.queries.StringQueryModel#isNotIn(String, String...)} or {@link io.sphere.sdk.queries.StringQueryModel#isNotPresent()}.
- Introduced an unsafe way to create predicates from strings with {@link QueryPredicate#of(String)}.
1.0.0-M2
- With the new reference expansion dsl it is possible to discover and create reference expansion paths for a query.
- All artifacts have the ivy organization {@code io.sphere.jvmsdk}.
- Migration from Google Guavas com.google.common.util.concurrent.ListenableFuture to Java 8 java.util.concurrent.CompletableFuture.
- Removed all Google Guava classes from the public API (internally still used).
- The logger is more fine granular controllable, for example the logger {@code sphere.products.responses.queries} logs only the responses of the queries for products. The trace level logs the JSON of responses and requests as pretty printed JSON.
- Introduced the class {@code io.sphere.sdk.models.Referenceable} which enables to use a model or a reference to a model as parameter, so no direct call of {@code io.sphere.sdk.models.DefaultModel#toReference()} is needed anymore for model classes.
- It is possible to overwrite the error messages of {@code io.sphere.sdk.test.DefaultModelAssert}, {@code io.sphere.sdk.test.LocalizedStringAssert} and {@code io.sphere.sdk.test.ReferenceAssert}.
- {@link io.sphere.sdk.models.Versioned} contains a type parameter to prevent copy and paste errors.
- Sorting query model methods have better support in the IDE, important methods are bold.
- Queries and commands for models are in there own package now and less coupled to the model.
- The query classes have been refactored.
*/
public final class ReleaseNotes {
private ReleaseNotes() {
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy