gpt4 book ai didi

java - 无法将自定义参数添加到 VTODO 组件的 STATUS 属性 (ical4j)

转载 作者:行者123 更新时间:2023-12-01 11:40:17 26 4
gpt4 key购买 nike

我正在尝试使用此代码为标准 Status 属性添加新的 XParameter

import net.fortuna.ical4j.model.Calendar;
import net.fortuna.ical4j.model.Component;
import net.fortuna.ical4j.model.Property;
import net.fortuna.ical4j.model.parameter.XParameter;
import org.apache.commons.io.IOUtils;
import com.example.common.util.ical.ICalUtil;

import java.io.FileInputStream;
import java.io.IOException;

public class TestICal {
public static void main(String[] args) throws IOException {
String content = IOUtils.toString(new FileInputStream("/tmp/taskA.ics"));
Calendar task = ICalUtil.parse(content);
Component vtodo = task.getComponent(Component.VTODO);
Property prop = vtodo.getProperty(Property.STATUS);
prop.getParameters().add(new XParameter("X-TEST-PARAM", "TEST-VALUE")); // java.lang.UnsupportedOperationException
}
}

但在执行过程中抛出以下异常

Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.Collections$UnmodifiableCollection.add(Collections.java:1016)
at net.fortuna.ical4j.model.ParameterList.add(ParameterList.java:157)
at TestICal.main(TestICal.java:18)

在调试器中,我可以看到在 ical4j 包内 add() 方法在 java.util.Collections$UnmodifyingRandomAccessList 上调用,实际上我在由于某种原因,API 文档实现了 java.util.List

无法删除或替换该属性,并且我看不到允许替换或添加另一个参数列表的方法。

所以现在我认为该字段不能有参数,至少在使用 ical4j 时是这样。

有什么想法吗?

最佳答案

回答我自己:可以通过搜索所需的属性索引并调用 PropertyList 扩展的 ArrayListset() 方法来完成

import net.fortuna.ical4j.model.*;
import net.fortuna.ical4j.model.parameter.XParameter;
import org.apache.commons.io.IOUtils;
import com.example.common.util.ical.ICalUtil;

import java.io.FileInputStream;
import java.util.Iterator;

public class TestICal {
public static void main(String[] args) throws Exception {
// reading and parsing ICS
String content = IOUtils.toString(new FileInputStream("/tmp/taskA.ics"));
Calendar task = ICalUtil.parse(content);
Component vtodo = task.getComponent(Component.VTODO);
Property prop = vtodo.getProperty(Property.STATUS);

// checking the prop before
System.out.println(prop);

// preparing new param list and adding it to new created prop
ParameterList paramList = new ParameterList();
paramList.add(new XParameter("X-TEST-PARAM", "TEST-VALUE"));
PropertyFactoryImpl propFactory = PropertyFactoryImpl.getInstance();
Property myprop = propFactory.createProperty(Property.STATUS, paramList, "COMPLETED");

// and finally
PropertyList propList = vtodo.getProperties();
int index = propList.indexOf(prop);
propList.set(index, myprop);

// checking
System.out.println(vtodo.getProperties().getProperty(Property.STATUS));
}
}

结果

STATUS:IN-PROCESS

STATUS;X-TEST-PARAM=TEST-VALUE:COMPLETED

关于java - 无法将自定义参数添加到 VTODO 组件的 STATUS 属性 (ical4j),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29583949/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com