/**
 * 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.weex.font;

import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

public class FontAdapter {


    private List<FontListener> mFontListener;

    public FontAdapter(){
        mFontListener = new CopyOnWriteArrayList<>();
    }

    public void addFontListener(FontListener fontListener){
        mFontListener.add(fontListener);
    }

    public void removeFontListener(FontListener fontListener){
        mFontListener.remove(fontListener);
    }

    public void onAddFontRule(String pageId, String fontFamily, String fontUrl){
        synchronized (this){
            for(FontListener fontListener : mFontListener){
                fontListener.onAddFontRule(pageId, fontFamily, fontUrl);
            }
        }
    }

    public void onFontLoad(String fontFaimly, String fontUrl, String filePath){
        synchronized (this) {
            for (FontListener fontListener : mFontListener) {
                fontListener.onFontLoad(fontFaimly, fontUrl, filePath);
            }
        }
    }
}
