com.u2apple.tool.service.DeviceServiceImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.u2apple.tool.service.DeviceServiceImpl.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.u2apple.tool.service;

import com.shuame.wandoujia.bean.Device;
import com.shuame.wandoujia.bean.Modal;
import com.shuame.wandoujia.bean.ProductId;
import com.shuame.wandoujia.bean.StaticMapFile;
import com.shuame.wandoujia.bean.VID;
import com.u2apple.tool.dao.DeviceXmlDao;
import com.u2apple.tool.dao.DeviceXmlDaoJaxbImpl;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.commons.lang3.StringUtils;

/**
 *
 * @author Adam
 */
public class DeviceServiceImpl implements DeviceService {

    private final DeviceXmlDao deviceXmlDao = new DeviceXmlDaoJaxbImpl();

    @Override
    public List<String> listFullProductId() {
        return v2();
    }

    private List<String> v1() {
        StaticMapFile staticMapFile = deviceXmlDao.getStaticMapFile();
        List<String> knockOffProductIds = listKnockOffProductId(staticMapFile.getDevices());
        List<String> fullProductIds = new ArrayList<>();
        List<VID> vids = staticMapFile.getVids();
        for (String productId : knockOffProductIds) {
            if (requireAdvanceProps(productId, vids)) {
                fullProductIds.add(productId);
            }
        }
        return fullProductIds;
    }

    private List<String> v2() {
        Set<String> productIds = new HashSet<>();
        StaticMapFile staticMapFile = deviceXmlDao.getStaticMapFile();
        List<VID> vids = staticMapFile.getVids();
        for (VID vid : vids) {
            for (Modal model : vid.getModals()) {
                for (ProductId productId : model.getProductId()) {
                    if (StringUtils.contains(productId.getCondition(), "type")) {
                        productIds.add(productId.getValue());
                    }
                }
            }
        }

        Set<String> knockOffProductIds = new HashSet<>();
        Set<String> disknockOffProductIds = new HashSet<>();

        Set<String> pIds = new HashSet<>();
        for (String productId : productIds) {
            if (isKnockOff(productId)) {
                knockOffProductIds.add(productId);
            } else {
                disknockOffProductIds.add(productId);
            }
        }

        //remove the same product id.
        for (String productId : disknockOffProductIds) {
            String kp = toKnockOff(productId);
            {
                if (!knockOffProductIds.contains(kp)) {
                    pIds.add(productId);
                }
            }
        }

        knockOffProductIds.addAll(pIds);
        for (String productId : knockOffProductIds) {
            pIds.add(toReal(productId));
        }
        List<String> list = new ArrayList<>(pIds);
        Collections.sort(list);
        return list;
    }

    private boolean isKnockOff(String productId) {
        return !productId.startsWith("cmcc-") && productId.contains("cc-");
    }

    private String toKnockOff(String productId) {
        return productId.replace("-", "cc-");
    }

    private String toReal(String productId) {
        return productId.replace("cc-", "-");
    }

    private List<String> listKnockOffProductId(List<Device> devices) {
        List<String> knockOffProductIds = new ArrayList<>();
        if (devices != null) {
            for (Device device : devices) {
                if (!device.getProductId().startsWith("cmcc-") && device.getProductId().contains("cc-")) {
                    knockOffProductIds.add(device.getProductId());
                }
            }
        }
        return knockOffProductIds;
    }

    private boolean requireAdvanceProps(String productId, List<VID> vids) {
        for (VID vid : vids) {
            for (Modal model : vid.getModals()) {
                for (ProductId aProductId : model.getProductId()) {
                    if (aProductId.getValue().equals(productId)
                            && StringUtils.contains(aProductId.getCondition(), "type")) {
                        return true;
                    }
                }
            }
        }
        return false;
    }

}