/**
 * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
 * agreements.  See the NOTICE file distributed with this work for additional information regarding
 * copyright ownership.  The ASF licenses this file to you 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.apache.metron.indexing.dao.search;

public class GroupOrder {

  private SortOrder sortOrder;
  private GroupOrderType groupOrderType;

  public SortOrder getSortOrder() {
    return sortOrder;
  }

  public void setSortOrder(String sortOrder) {
    this.sortOrder = SortOrder.fromString(sortOrder);
  }

  public GroupOrderType getGroupOrderType() {
    return groupOrderType;
  }

  public void setGroupOrderType(String groupOrderType) {
    this.groupOrderType = GroupOrderType.fromString(groupOrderType);
  }
}
